Android板外接了USB设备,每次开机后第一次启动我们的APP,都会弹出申请USB的弹框,客户使用起来很不方便,翻了一些文章和代码后通过修改UsbPermissionActivity.java实现。
我们看到此Activity是一个AlertActivity,也就是说应用申请USB权限时就是打开的此Activity,在此类中我们找到了授权按钮的回调实现:
public void onClick(DialogInterface dialog, int which) {
if (which == AlertDialog.BUTTON_POSITIVE) {
mPermissionGranted = true;
}
finish();
}
通过代码分析得知,点击授权就是设置了变量mPermissionGranted为true,然后关闭弹框,而在弹框的onDestroy的回调中完成了真正的权限申请,所以为了实现我们自己的APP不需要申请权限,可以在onCreate的函数中,判断申请者为我们的应用,直接设置mPermissionGranted为true并关闭页面以达到用户点击同意授权一样的效果。
而其他的运行时权限,则可以通过修改PermissionManagerService.java来实现,在函数restorePermissionState中做如下修改:
如果要经常修改,也可以做成白名单的形式,从配置文件里面读取APP包名,可以参考这篇文章