前言
android应用对于dangerous级别的权限申请必须要在弹窗中或设置中获取。
对于厂商定制第三方应用如果想通过不弹窗静默获取这些权限,可以通过本文的方法获得。
前提:应用拥有系统签名
AndroidManifest.xml申请权限
在AndroidManifest.xml里面加上需要的权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在onCreate中动态获取权限
在onCreate中加上
try {
PackageManager pm = this.getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo("com.example.myapplication", PackageManager.GET_META_DATA);
UserHandle uid = UserHandle.getUserHandleForUid(ai.uid);
PackageManager packageManager = this.getPackageManager();
Method method = packageManager.getClass().getDeclaredMethod("grantRuntimePermission", String.class, String.class, UserHandle.class);
method.setAccessible(true);
method.invoke(packageManager, "com.example.myapplication", "android.permission.ACCESS_FINE_LOCATION", uid);
method.invoke(packageManager, "com.example.myapplication", "android.permission.READ_EXTERNAL_STORAGE", uid);
method.invoke(packageManager, "com.example.myapplication", "android.permission.WRITE_EXTERNAL_STORAGE", uid);
} catch (Exception e) {
e.printStackTrace();
}
编译安装之后,并且第一次运行之后,app就完成了静默获取dangerous级别权限。