MIUI應用使用權限設定,miui應用許可權
無論你覺得我寫的好壞都可以在下面評論告訴我,你的支援是我繼續寫下去的動力,謝謝!
隨著miui越來越封閉,小米對非自由渠道的應用限制越來越苛刻,我們公司的產品一半以上的使用者都是來自小米,而且像我們這樣的靠簡訊支付維持收入的遊戲,簡訊許可權預設禁止真是要了我們的命。被加入miui黑名單的遊戲預設重要的許可權都是禁止狀態,譬如傳送簡訊許可權預設設定為禁止就直接斷了我們收入來源。因此花了幾個小時在網上搜尋相關資料,我們不能協助使用者開啟應用的許可權至少我們能夠引導使用者去開啟應用許可權,並且將引導儘可能做的很簡單。
資料一:跳轉miui應用使用權限設定頁面(之相容V5/V6老版本只跳轉上一級介面即可)http://www.tuicool.com/articles/jUby6rA
資料二:判斷當前裝置是否是小米 http://dev.xiaomi.com/doc/p=254/index.html
資料三:完整demo http://download.csdn.net/detail/tgbus18990140382/8932881
其他廢話也不多說了,直接上代碼
先是通過context跳轉到對應應用的使用權限設定頁面:
/** * 跳轉到應用使用權限設定頁面 http://www.tuicool.com/articles/jUby6rA * @param context 傳入app 或者 activity context,通過context擷取應用packegename,之後通過packegename跳轉制定應用 * @return 是否是miui */public static boolean gotoPermissionSettings(Context context) {boolean mark = isMIUI();if ( mark ) {// 之相容miui v5/v6 的應用使用權限設定頁面,否則的話跳轉應用設定頁面(使用權限設定上一級頁面)try {Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");localIntent.putExtra("extra_pkgname", context.getPackageName());context.startActivity(localIntent);} catch (ActivityNotFoundException e) {Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);Uri uri = Uri.fromParts("package", context.getPackageName(),null);intent.setData(uri);context.startActivity(intent);}}return mark;}
再就是判斷是否是小米的裝置,官方為我們提供了一種簡單方便的辦法:
/** * 檢查手機是否是miui * @ref http://dev.xiaomi.com/doc/p=254/index.html * @return */public static boolean isMIUI(){String device = Build.MANUFACTURER;System.out.println( "Build.MANUFACTURER = " + device );if ( device.equals( "Xiaomi" ) ) {System.out.println( "this is a xiaomi device" );return true;}else{return false;}}
我們同樣也可以使用類似尋找activtiy的方式判斷是否是miui,但是這種方式同樣存在相容的問題,不是很推薦,也附上代碼供大家參考:
/** * 判斷是否是miui V5/V6,老的miui無法相容 * @param context * @return */public static boolean isMIUIv5v6(Context context) {boolean result = false;Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");if (isIntentAvailable(context, localIntent)) {result = true;}return result;}/** * 檢查是否有這個activity * @param context * @param intent * @return */private static boolean isIntentAvailable(Context context, Intent intent) {PackageManager packageManager = context.getPackageManager();List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.GET_ACTIVITIES);return list.size() > 0;}
以下是完整的代碼,可以直接使用的類:
public class SetMiuiPermission {/** * 跳轉到應用使用權限設定頁面 http://www.tuicool.com/articles/jUby6rA * @param context 傳入app 或者 activity context,通過context擷取應用packegename,之後通過packegename跳轉制定應用 * @return 是否是miui */public static boolean gotoPermissionSettings(Context context) {boolean mark = isMIUI();if ( mark ) {// 之相容miui v5/v6 的應用使用權限設定頁面,否則的話跳轉應用設定頁面(使用權限設定上一級頁面)try {Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");localIntent.putExtra("extra_pkgname", context.getPackageName());context.startActivity(localIntent);} catch (ActivityNotFoundException e) {Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);Uri uri = Uri.fromParts("package", context.getPackageName(),null);intent.setData(uri);context.startActivity(intent);}}return mark;}/** * 檢查手機是否是miui * @ref http://dev.xiaomi.com/doc/p=254/index.html * @return */public static boolean isMIUI(){String device = Build.MANUFACTURER;System.out.println( "Build.MANUFACTURER = " + device );if ( device.equals( "Xiaomi" ) ) {System.out.println( "this is a xiaomi device" );return true;}else{return false;}}/** * 判斷是否是miui V5/V6,老的miui無法相容 * @param context * @return */public static boolean isMIUIv5v6(Context context) {boolean result = false;Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");if (isIntentAvailable(context, localIntent)) {result = true;}return result;}/** * 檢查是否有這個activity * @param context * @param intent * @return */private static boolean isIntentAvailable(Context context, Intent intent) {PackageManager packageManager = context.getPackageManager();List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.GET_ACTIVITIES);return list.size() > 0;}}以上函數的入口為:gotoPermissionSettings,傳入當前application的context即可條狀到當前應用的使用權限設定頁面。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。