ITPub博客

首页 > 应用开发 > Java > 短视频直播源码Android Camera 屏蔽下拉框和导航栏的方法

短视频直播源码Android Camera 屏蔽下拉框和导航栏的方法

原创 Java 作者:zhibo系统开发 时间:2020-07-24 14:28:52 0 删除 编辑

在开发过程中,有时候可能需要防呆的功能,防止用户在使用过程中误点返回键,HOME键,下拉框等之类的。接下来我们需要屏蔽这些按键,先看看代码:


 /**
     * 隐藏虚拟键
     */
    public static void hideNavigation(Activity context) {
 
        if ((Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB)) {
            Logger.get().d("myth hideNavigation  " + context.getClass().getSimpleName());
 
            context.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);
        }
    }
 
    /**
     * 隐藏虚拟键
     */
    public static void hideNavigation(View view) {
 
        if ((Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB)) {
            Logger.get().d("myth hideNavigation  " + view.getClass().getSimpleName());
 
//            | View.SYSTEM_UI_FLAG_FULLSCREEN
 
            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
 
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);
        }
    }
 
    /**
     * 显示虚拟键
     */
    public static void showNavigation(View view) {
 
        if ((Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB)) {
            Logger.get().d("myth hideNavigation  " + view.getClass().getSimpleName());
 
            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
        }



上面代码或许是一种方式,但是这种方式不是很稳定,很容易就自己又显示出来了,之后又找到一种实现方式,代码如下,亲测没问题:


/**
 * hide Navigation
 */
public static void hideNavigation(Activity context) {
    statusBarManager = (StatusBarManager) context.getSystemService("statusbar");
    int flag = StatusBarManager.DISABLE_HOME | StatusBarManager.DISABLE_BACK | StatusBarManager.DISABLE_SEARCH | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_EXPAND;
    statusBarManager.disable(flag);
}
public static void showNavigation(){
    if (statusBarManager != null)
    statusBarManager.disable(StatusBarManager.DISABLE_NONE);
}

StatusBarManager这个类估计是找不到,如果用Android源码编译,可以import包就ok:

import android.app,StatusBarManager;

如果不是android 源码编译,那可以使用反射的机制完成这个功能,代码如下:


private void disableStatusBars() {
        Object service = getSystemService("statusbar");
        try {
            Class<?> statusBarManager = Class.forName
                    ("android.app.StatusBarManager");
            Method expand = statusBarManager.getMethod("disable", int.class);
            expand.invoke(service, 0x00010000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69978258/viewspace-2706745/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-07-02

  • 博文量
    604
  • 访问量
    231759