Android11.0系统中设置默认允许访问USB设备不弹授权窗

Android11.0系统中设置默认允许访问USB设备不弹授权窗

  • 设置默认允许访问USB设备不弹授权窗
    • 设置默认允许访问USB设备不弹授权窗
    • 封装的jar中添加对应方法供第三方应用开发者调用
    • 在系统设置中添加控制开关参见其它文章自行实现

设置默认允许访问USB设备不弹授权窗

本文描述Android11中插入USB摄像头等设备时,会弹出如下图的授权窗口,通过设置默认允许,不在弹授权窗口。
Android11.0系统中设置默认允许访问USB设备不弹授权窗_第1张图片

设置默认允许访问USB设备不弹授权窗

  1. 添加全局状态保存配置,参见Android11.0隐藏状态栏及导航栏;

  2. ITestManager及TestManager中添加方法定义,路径为 /frameworks/base/core/com/yjz/test/api/ITestManager.aidl;

    void allowAccessUsbByDefault(boolean isAllow);

/frameworks/base/core/com/yjz/test/TestManager.java

    public void allowAccessUsbByDefault(boolean isAllow) {
        try {
            mService.allowAccessUsbByDefault(isAllow);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
  1. TestManagerService中添加方法,路径为 /frameworks/base/services/core/java/com/android/server/yjz/TestManagerService.java;
//********省略代码******

    private static final int MSG_WHAT_ALLOW_ACCESS_USB_BY_DEFAULT = 9;

    @Override
    public void allowAccessUsbByDefault(boolean b) throws RemoteException {
        Message msg = Message.obtain();
        msg.what = MSG_WHAT_ALLOW_ACCESS_USB_BY_DEFAULT;
        msg.arg1 = b ? 1 : 0;
        mHandler.sendMessage(msg);
    }

    private Handler mHandler = new Handler() {
        @Override
        public void dispatchMessage(@NonNull Message msg) {
            switch (msg.what) {
                case MSG_WHAT_ALLOW_ACCESS_USB_BY_DEFAULT:
                    Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ALLOW_ACCESS_USB_BY_DEFAULT, msg.arg1);
                    break;
            }
        }
    };

//********省略代码******
  1. 修改授权界面UsbPermissionActivity及UsbConfirmActivity,路径:/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

//********省略代码******
        if (Settings.Global.getInt(getContentResolver(), Settings.Global.ALLOW_ACCESS_USB_BY_DEFAULT, 0) == 0) {
            setupAlert();
        }else {
            mPermissionGranted = true;
            finish();
        }
    }
//********省略代码******    

/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java

    @Override
    public void onCreate(Bundle icicle) {
        getWindow().addSystemFlags(
                WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);

        super.onCreate(icicle);

//********省略代码******
        if (Settings.Global.getInt(getContentResolver(), Settings.Global.ALLOW_ACCESS_USB_BY_DEFAULT, 0) == 0) {
            setupAlert();
        }else {
            onClick(null, AlertDialog.BUTTON_POSITIVE);
        }

    }
//********省略代码******   

封装的jar中添加对应方法供第三方应用开发者调用

  1. 在添加 修改路径/vendor/yjz/com/yjz/sdk/SDKManager.java

//********省略代码******
    @Override
    public void setAllowAccessUsbByDefault(boolean isAllow) {
        mTestManager.allowAccessUsbByDefault(isAllow);
    }
//********省略代码******

  1. 编译 mmm vendor/yjz/ 生成yjz-sdk-api.jar
  2. 应用开发时导入yjz-sdk-api.jar,并调用方法
   SDKManager manger = new SDKManager(this);
   manger.setAllowAccessUsbByDefault(true);

在系统设置中添加控制开关参见其它文章自行实现

你可能感兴趣的:(Android11.0,android)