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

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

本文描述Android11中插入USB摄像头等设备时,会弹出如下图的授权窗口,通过设置默认允许,不在弹授权窗口。
在这里插入图片描述

设置默认允许访问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);

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

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值