PermissionSettingPage.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package com.yyrh.easypermission;
  2. import android.content.ComponentName;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.pm.PackageManager;
  6. import android.net.Uri;
  7. import android.os.Build;
  8. import android.provider.Settings;
  9. /**
  10. * @className: PermissionSettingPage
  11. * @classDescription:权限设置页面的跳转工具类
  12. * @author: Pan_
  13. * @createTime: 2018/10/26
  14. */
  15. public class PermissionSettingPage {
  16. private static final String MARK = Build.MANUFACTURER.toLowerCase();
  17. /**
  18. * 跳转到应用权限设置页面
  19. *
  20. * @param context 上下文对象
  21. * @param newTask 是否使用新的任务栈启动
  22. */
  23. static void start(Context context, boolean newTask) {
  24. Intent intent = null;
  25. if (MARK.contains("huawei")) {
  26. intent = huawei(context);
  27. } else if (MARK.contains("xiaomi")) {
  28. intent = xiaomi(context);
  29. } else if (MARK.contains("oppo")) {
  30. intent = oppo(context);
  31. } else if (MARK.contains("vivo")) {
  32. intent = vivo(context);
  33. } else if (MARK.contains("meizu")) {
  34. intent = meizu(context);
  35. }
  36. if (intent == null || !hasIntent(context, intent)) {
  37. intent = google(context);
  38. }
  39. if (newTask) {
  40. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  41. }
  42. try {
  43. context.startActivity(intent);
  44. } catch (Exception ignored) {
  45. intent = google(context);
  46. context.startActivity(intent);
  47. }
  48. }
  49. private static Intent google(Context context) {
  50. Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  51. intent.setData(Uri.fromParts("package", context.getPackageName(), null));
  52. return intent;
  53. }
  54. private static Intent huawei(Context context) {
  55. Intent intent = new Intent();
  56. intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity"));
  57. if (hasIntent(context, intent)) return intent;
  58. intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.addviewmonitor.AddViewMonitorActivity"));
  59. if (hasIntent(context, intent)) return intent;
  60. intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.notificationmanager.ui.NotificationManagmentActivity"));
  61. return intent;
  62. }
  63. private static Intent xiaomi(Context context) {
  64. Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
  65. intent.putExtra("extra_pkgname", context.getPackageName());
  66. if (hasIntent(context, intent)) return intent;
  67. intent.setPackage("com.miui.securitycenter");
  68. if (hasIntent(context, intent)) return intent;
  69. intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
  70. if (hasIntent(context, intent)) return intent;
  71. intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");
  72. return intent;
  73. }
  74. private static Intent oppo(Context context) {
  75. Intent intent = new Intent();
  76. intent.putExtra("packageName", context.getPackageName());
  77. intent.setClassName("com.color.safecenter", "com.color.safecenter.permission.floatwindow.FloatWindowListActivity");
  78. if (hasIntent(context, intent)) return intent;
  79. intent.setClassName("com.coloros.safecenter", "com.coloros.safecenter.sysfloatwindow.FloatWindowListActivity");
  80. if (hasIntent(context, intent)) return intent;
  81. intent.setClassName("com.oppo.safe", "com.oppo.safe.permission.PermissionAppListActivity");
  82. return intent;
  83. }
  84. private static Intent vivo(Context context) {
  85. Intent intent = new Intent();
  86. intent.setClassName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.FloatWindowManager");
  87. intent.putExtra("packagename", context.getPackageName());
  88. if (hasIntent(context, intent)) return intent;
  89. intent.setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.safeguard.SoftPermissionDetailActivity"));
  90. return intent;
  91. }
  92. private static Intent meizu(Context context) {
  93. Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
  94. intent.putExtra("packageName", context.getPackageName());
  95. intent.setComponent(new ComponentName("com.meizu.safe", "com.meizu.safe.security.AppSecActivity"));
  96. return intent;
  97. }
  98. private static boolean hasIntent(Context context, Intent intent) {
  99. return context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0;
  100. }
  101. }