1. 程式人生 > >Android 開啟應用許可權設定頁面

Android 開啟應用許可權設定頁面

1.首先判斷自己的應用的通知許可權是否開啟

private static String CHECK_OP_NO_THROW = "checkOpNoThrow";
private static String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";

/**
 * 判斷該應用通知開關是否開啟
* @param context
* @return
*/
@RequiresApi(api = Build.VERSION_CODES.KITKAT)//提高 Android 高版本的相容
public static boolean isNotificationEnabled(Context context) {

    AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE
); ApplicationInfo appInfo = context.getApplicationInfo(); String pkg = context.getApplicationContext().getPackageName();//獲取該應用資訊 int uid = appInfo.uid; Class appOpsClass = null; try { appOpsClass = Class.forName(AppOpsManager.class.getName()); Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW
, Integer.TYPE, Integer.TYPE, String.class); Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); int value = (Integer) opPostNotificationValue.get(Integer.class); //根據資訊得到值進行比較 如果相等則返回true 否則返回false  return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED
); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return false; } 2.調起系統自帶 Dialog 去處理
/**
 * 判斷手機通知是否開啟,沒有開啟則開啟應用管理許可權頁面
* @param context
*/
public static void showDelDialog(final Context context){
    // 構造對話方塊
AlertDialog.Builder builder = new AlertDialog.Builder(context);//構建一個AlertDialog.Builder物件    
    builder.setTitle("溫馨提示");//設定標題
    builder.setIcon(R.drawable.ic_app);//設定圖示
builder.setMessage("你推送功能尚未開啟,會影響您的正常使用,請開啟推送功能");//設定提示內容
//建立兩個點選事件
 // 更新builder.setPositiveButton("確認開啟", new DialogInterface.OnClickListener() { @Overridepublic void onClick(DialogInterface dialog, int which) {
//根據包名開啟對應的應用許可權設定頁面
 dialog.dismiss(); Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);//設定去向意圖 Uri uri = Uri.fromParts("package", context.getPackageName(), null); intent.setData(uri);
//發起跳轉
 context.startActivity(intent); } }); // 稍後更新builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Overridepublic void onClick(DialogInterface dialog, int which) {
  //關閉對話方塊
dialog.dismiss(); } }); Dialog noticeDialog = builder.create(); noticeDialog.setCanceledOnTouchOutside(false); noticeDialog.setCancelable(false); noticeDialog.show();}