Android11.0系统中设置默认允许访问USB设备不弹授权窗
设置默认允许访问USB设备不弹授权窗
本文描述Android11中插入USB摄像头等设备时,会弹出如下图的授权窗口,通过设置默认允许,不在弹授权窗口。
设置默认允许访问USB设备不弹授权窗
-
添加全局状态保存配置,参见Android11.0隐藏状态栏及导航栏;
-
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();
}
}
- 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;
}
}
};
//********省略代码******
- 修改授权界面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中添加对应方法供第三方应用开发者调用
- 在添加 修改路径/vendor/yjz/com/yjz/sdk/SDKManager.java
//********省略代码******
@Override
public void setAllowAccessUsbByDefault(boolean isAllow) {
mTestManager.allowAccessUsbByDefault(isAllow);
}
//********省略代码******
- 编译 mmm vendor/yjz/ 生成yjz-sdk-api.jar
- 应用开发时导入yjz-sdk-api.jar,并调用方法
SDKManager manger = new SDKManager(this);
manger.setAllowAccessUsbByDefault(true);