public class PermissionUtil {private final String TAG = "PermissionUtil";private Activity mContext;private BaseUIFragment mFragment;//自己的项目包名private String packageName = "";private static PermissionUtil Instance;public static PermissionUtil getInstance(Activity context) {if (Instance == null) {Instance = new PermissionUtil(context);}return Instance;}public static PermissionUtil getInstance(BaseUIFragment mFragment) {if (Instance == null) {Instance = new PermissionUtil(mFragment);}return Instance;}public PermissionUtil(Activity context) {this.mContext = context;this.packageName = mContext.getPackageName();}public PermissionUtil(BaseUIFragment mFragment) {this.mFragment = mFragment;this.packageName = mContext.getPackageName();}public void GoToSetting() {goIntentSetting();}private void goIntentSetting() {try {Intent intent = new Intent();intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);intent.addCategory(Intent.CATEGORY_DEFAULT);intent.setData(Uri.parse("package:" + mContext.getPackageName()));intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);if (mContext != null) {mContext.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);} else if (mFragment != null) {mFragment.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);}} catch (Exception e) {e.printStackTrace();String name = Build.MANUFACTURER;LogUtil.e(TAG, "jumpPermissionPage --- name : " + name);switch (name) {case "HUAWEI":goHuaWeiMainager();break;case "vivo":goVivoMainager();break;case "OPPO":goOppoMainager();break;case "Coolpad":goCoolpadMainager();break;case "Meizu":goMeizuMainager();break;case "Xiaomi":goXiaoMiMainager();break;case "Sony":goSonyMainager();break;case "LG":goLGMainager();break;default:systemConfig();break;}}}private void goLGMainager() {try {Intent intent = new Intent(packageName);ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.Settings$AccessLockSummaryActivity");intent.setComponent(comp);if (mContext != null) {mContext.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);} else if (mFragment != null) {mFragment.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);}} catch (Exception e) {e.printStackTrace();systemConfig();}}private void goSonyMainager() {try {Intent intent = new Intent(packageName);ComponentName comp = new ComponentName("com.sonymobile.cta", "com.sonymobile.cta.SomcCTAMainActivity");intent.setComponent(comp);if (mContext != null) {mContext.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);} else if (mFragment != null) {mFragment.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);}} catch (Exception e) {e.printStackTrace();systemConfig();}}private void goHuaWeiMainager() {try {Intent intent = new Intent(packageName);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");intent.setComponent(comp);if (mContext != null) {mContext.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);} else if (mFragment != null) {mFragment.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);}} catch (Exception e) {e.printStackTrace();systemConfig();}}private static String getMiuiVersion() {String propName = "ro.miui.ui.version.name";String line;BufferedReader input = null;try {Process p = Runtime.getRuntime().exec("getprop " + propName);input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);line = input.readLine();input.close();} catch (IOException ex) {ex.printStackTrace();return null;} finally {try {input.close();} catch (IOException e) {e.printStackTrace();}}return line;}private void goXiaoMiMainager() {String rom = getMiuiVersion();LogUtil.e(TAG, "goMiaoMiMainager --- rom : " + rom);Intent intent = new Intent();if ("V6".equals(rom) || "V7".equals(rom)) {intent.setAction("miui.intent.action.APP_PERM_EDITOR");intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");intent.putExtra("extra_pkgname", packageName);if (mContext != null) {mContext.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);} else if (mFragment != null) {mFragment.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);}} else if ("V8".equals(rom) || "V9".equals(rom)) {intent.setAction("miui.intent.action.APP_PERM_EDITOR");intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");intent.putExtra("extra_pkgname", packageName);if (mContext != null) {mContext.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);} else if (mFragment != null) {mFragment.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);}} else {systemConfig();}}private void goMeizuMainager() {try {Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");intent.addCategory(Intent.CATEGORY_DEFAULT);intent.putExtra("packageName", packageName);if (mContext != null) {mContext.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);} else if (mFragment != null) {mFragment.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);}} catch (ActivityNotFoundException localActivityNotFoundException) {localActivityNotFoundException.printStackTrace();systemConfig();}}/*** 系统设置界面*/private void systemConfig() {Intent intent = new Intent(Settings.ACTION_SETTINGS);if (mContext != null) {mContext.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);} else if (mFragment != null) {mFragment.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);}}private void goOppoMainager() {doStartApplicationWithPackageName("com.coloros.safecenter");}/*** doStartApplicationWithPackageName("com.yulong.android.security:remote")* <p>* 和Intent open = getPackageManager().getLaunchIntentForPackage("com.yulong.android.security:remote");* <p>* startActivity(open);* <p>* 本质上没有什么区别,通过Intent open...打开比调用doStartApplicationWithPackageName方法更快,也是android本身提供的方法*/private void goCoolpadMainager() {doStartApplicationWithPackageName("com.yulong.android.security:remote");}private void goVivoMainager() {doStartApplicationWithPackageName("com.bairenkeji.icaller");}/*** 此方法在手机各个机型设置中已经失效** @return*/private Intent getAppDetailSettingIntent() {Intent localIntent = new Intent();localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");localIntent.setData(Uri.fromParts("package", mContext.getPackageName(), null));return localIntent;}private void doStartApplicationWithPackageName(String packagename) {// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等PackageInfo packageinfo = null;try {packageinfo = mContext.getPackageManager().getPackageInfo(packagename, 0);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}if (packageinfo == null) {return;}// 创建一个类别为CATEGORY_LAUNCHER的该包名的IntentIntent resolveIntent = new Intent(Intent.ACTION_MAIN, null);resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);resolveIntent.setPackage(packageinfo.packageName);// 通过getPackageManager()的queryIntentActivities方法遍历List<ResolveInfo> resolveinfoList = mContext.getPackageManager().queryIntentActivities(resolveIntent, 0);LogUtil.e("PermissionPageManager", "resolveinfoList" + resolveinfoList.size());for (int i = 0; i < resolveinfoList.size(); i++) {LogUtil.e("PermissionPageManager", resolveinfoList.get(i).activityInfo.packageName + resolveinfoList.get(i).activityInfo.name);}ResolveInfo resolveinfo = resolveinfoList.iterator().next();if (resolveinfo != null) {// packageName参数2 = 参数 packnameString packageName = resolveinfo.activityInfo.packageName;// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packageName参数2.mainActivityname]String className = resolveinfo.activityInfo.name;// LAUNCHER IntentIntent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);// 设置ComponentName参数1:packageName参数2:MainActivity路径ComponentName cn = new ComponentName(packageName, className);intent.setComponent(cn);try {if (mContext != null) {mContext.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);} else if (mFragment != null) {mFragment.startActivityForResult(intent, Constant.PERMISSION_SETTING_FOR_RESULT);}} catch (Exception e) {systemConfig();e.printStackTrace();}}}
}

Android之APP跳转到权限设置界面适配华为、小米、vivo等相关推荐

  1. App跳转到权限设置界面

    iOS 10 App跳转到权限设置界面(iOS10之前就不各个记录了) NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLSt ...

  2. Android 权限被拒绝,跳转至权限设置界面

    参考博客:Android跳转权限设置页面 本文基于上面博客进行封装,直接上代码: import android.content.ComponentName; import android.conten ...

  3. Android 点击跳转到蓝牙设置界面

    点击跳转到蓝牙设置界面 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  4. Android 跳转应用权限设置页面 适配小米系统

    跳转应用设置页面方便用户修改已拒绝的权限,是经常遇到的需求,但是MIUI 8 系统上测试发现有坑,写一篇文章记录一下. 通常的跳转应用设置页面方法 Intent intent = new Intent ...

  5. android打开蓝牙设置界面,Android 点击跳转到蓝牙设置界面

    基于H5的微信支付开发详解 这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲 ...

  6. iOS10从app跳转到WiFi设置界面

    let url = URL(string: "App-Prefs:root=WIFI")if #available(iOS 10.0, *) {UIApplication.shar ...

  7. android app没有读写权限设置,Android 6.0以上权限拒绝打开权限设置界面的解决方法...

    本人使用小米手机,打开qq或者微信的时候,某个权限拒绝的话,会提示你开启,点击开启会跳转到app的权限设置界面,当然了,这是国内系统深层定制的原因,也就是说这个界面原声的android没有的!这里以小 ...

  8. Android:检查通知权限并跳转到通知设置界面

    声明:该方案只对API19及以上版本有效 一.目标需求 最近项目中在完善推送功能,需要进入APP时检测一下是否开启了推送权限,如果没有开启弹窗提醒,当用户点击弹窗时直接跳转到APP的通知设置界面,就像 ...

  9. Android调app权限设置界面(适配各大手机厂商终极版本)

    背景: 众所周知,国内的android是在google之上,各大手机厂商加了一层,诸如MIUI.EUI,之类的系统.因此在我们开发过程中想调出某应用的权限设置页面,调出的是google原生的权限控制界 ...

最新文章

  1. linux什么是实时调度,Linux 实时调度 示例
  2. 中文手机评论情感分类系列(一)
  3. 配置React项目的运行环境
  4. android listpreference 自定义,Android – 我的ListPreference中的自定义行布局
  5. sizeof你真的弄明白了吗?
  6. bootstrap快速入门_在5分钟内学习Bootstrap 4-快速入门指南
  7. QTcrateor 编译 ROS
  8. 原型模式(Prototype)以及深浅复制
  9. hdu3468 Treasure Hunting 二分匹配
  10. Java Web开发之一:用好的技术设计来犒赏自己
  11. postgresql 数据库基本操作
  12. 产品经理必备 [Axure组件、PRD模板、竞品分析、数据分析等模板]
  13. opencv的下载与安装
  14. Linux安装缺少字体包,linux版wps-office安装缺少的字体
  15. JS(javascript)在自动化测试项目中的应用【软件测试开发入门教程】
  16. dos批处理脚本自动添加网络IP打印机-简单亲测可用
  17. 猫眼网历史日票房数据爬取
  18. CF1364D Ehab‘s Last Corollary
  19. 超多趣味测评测试微信小程序源码 可插入流量主广告位
  20. python(2)带解析和要点

热门文章

  1. 华硕飞行堡垒 新机子安装双系统 linux
  2. 华为重度渗透的欧洲,美国如何清剿?
  3. Resional Rose使用说明
  4. 【Android应用开发技术:媒体开发】音频
  5. Android动画之帧动画
  6. next主题搭建相册(无需安装插件,代码即可实现)
  7. 睡眠质量不好怎么改善,几个助眠好物帮助你睡安稳觉
  8. app测试——打印日志
  9. 解决东方财富数据接口激活后仍显示reactive的问题
  10. 企业信息化整体架构图