Android各大手機系統開啟許可權管理頁面
阿新 • • 發佈:2019-01-05
相信做過Android的都知道,現在的手機系統五花八門,當我們去請求使用者的許可權的時候,總是會彈出是否允許的對話方塊。
而且使用者一旦不小心點了拒絕,下次就不再詢問了,而很多小白使用者也不知道怎麼去設定。這就導致了很不好的使用者體驗。
經過研究,我發現像小米,魅族,這些滿大街的系統,都是可以通過隱式意圖開啟許可權設定頁面的。
這裡指的是自身app的許可權管理頁面
之前已經有人寫過類似的文章,不過都比較分散,我這裡把這些方法總結了一下。
不多說,直接上程式碼。
首先是最蛋疼的小米,百度了很多前輩留下的方法,發現都不能開啟,沒有辦法,只能通過 adb dumpsys activity activities 命令去檢視
經過一番研究終於打開了。
/**
* 跳轉到miui的許可權管理頁面
*/
private void gotoMiuiPermission() {
Intent i = new Intent("miui.intent.action.APP_PERM_EDITOR");
ComponentName componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
i.setComponent(componentName);
i.putExtra("extra_pkgname" , getPackageName());
try {
startActivity(i);
} catch (Exception e) {
e.printStackTrace();
gotoMeizuPermission();
}
}
接下來上魅族的程式碼
/**
* 跳轉到魅族的許可權管理系統
*/
private void gotoMeizuPermission() {
Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC" );
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
try {
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
gotoHuaweiPermission();
}
}
華為的系統由於不太一樣,有些系統是華為自己的許可權管理,而6.0的是用的原生的許可權管理頁面,目前手上只有一臺6.0的華為手機,
暫時沒有研究到開啟的方法,如果有知道的大神麻煩告知一下
不過打不開沒關係,我們可以退而求其次,開啟所用應用的許可權管理頁面
/**
* 華為的許可權管理頁面
*/
private void gotoHuaweiPermission() {
try {
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");//華為許可權管理
intent.setComponent(comp);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
startActivity(getAppDetailSettingIntent());
}
}
目前也就研究了這三大系統,對於原生系統,和其他系統,如果找不到方法,也可以先把使用者引導到系統設定頁面
/**
* 開啟應用詳情頁面intent
*/
private Intent gotoAppDetailSettingIntent() {
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 9) {
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", getPackageName(), null));
} else if (Build.VERSION.SDK_INT <= 8) {
localIntent.setAction(Intent.ACTION_VIEW);
localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());
}
startActivity(localIntent);
}