Android如何在app中通过一个按钮直接跳转到的系统的权限设置页面
2017-01-04 22:19
1091 查看
续上一篇《Android的权限设置及自启动设置》,在开发中我通过一个按钮来进行跳转到系统的权限页面,一开始的代码就是上一篇中的原模原样的代码,如下所示:
然而,把公司里的安卓都借来测了一遍后只想感叹:理想很丰满,现实很骨感!
首先呢,公司里的手机只有小米(好多只)、vivo(两只)、三星(一只)、oppo(一只)。
测试结果:
小米,没有问题,跳转到页面后直接选择权限管理就可以设置了;
vivo,跳转到的权限页面只给看,不能设置;
三星,这一只没问题;
oppo,和vivo一样,跳转到的权限页面只给看,不能设置。
这实在是好坑,oppo和vivo都有单独的一款系统软件管家,只有在那个app里才能进行权限设置,所以这种情况下,不应该跳转到系统的设置页面,而是打开软件管家。那么想要去打开一个app就必须要知道这个app的包名。所有,只能通过adb来获取它们各自管家的包名。例如,打开vivo的 i管家,在Terminal中通过执行这个指令 adb shell dumpsys activity top来捕捉软件的主Activity。
adb结果:
vivo的软件管家包名:com.iqoo.secure
oppo的软件管家包名:com.oppo.safe
所以,我那段代码也需要加点判断,代码如下:
还有酷派、魅族、HTC等等公司里没有机型,还不知道结果是怎么样的,如果有现成手机的,可以测一下分享一下,谢谢 •_^
/** * 跳转到权限设置界面 */ private void getAppDetailSettingIntent(Context context){ Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if(Build.VERSION.SDK_INT >= 9){ intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); intent.setData(Uri.fromParts("package", getPackageName(), null)); } else if(Build.VERSION.SDK_INT <= 8){ intent.setAction(Intent.ACTION_VIEW); intent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails"); intent.putExtra("com.android.settings.ApplicationPkgName", getPackageName()); } startActivity(intent); }
然而,把公司里的安卓都借来测了一遍后只想感叹:理想很丰满,现实很骨感!
首先呢,公司里的手机只有小米(好多只)、vivo(两只)、三星(一只)、oppo(一只)。
测试结果:
小米,没有问题,跳转到页面后直接选择权限管理就可以设置了;
vivo,跳转到的权限页面只给看,不能设置;
三星,这一只没问题;
oppo,和vivo一样,跳转到的权限页面只给看,不能设置。
这实在是好坑,oppo和vivo都有单独的一款系统软件管家,只有在那个app里才能进行权限设置,所以这种情况下,不应该跳转到系统的设置页面,而是打开软件管家。那么想要去打开一个app就必须要知道这个app的包名。所有,只能通过adb来获取它们各自管家的包名。例如,打开vivo的 i管家,在Terminal中通过执行这个指令 adb shell dumpsys activity top来捕捉软件的主Activity。
adb结果:
vivo的软件管家包名:com.iqoo.secure
oppo的软件管家包名:com.oppo.safe
所以,我那段代码也需要加点判断,代码如下:
/** * 跳转到权限设置界面 */ private void getAppDetailSettingIntent(Context context){ // vivo 点击设置图标>加速白名单>我的app // 点击软件管理>软件管理权限>软件>我的app>信任该软件 Intent appIntent = context.getPackageManager().getLaunchIntentForPackage("com.iqoo.secure"); if(appIntent != null){ context.startActivity(appIntent); floatingView = new SettingFloatingView(this, "SETTING", getApplication(), 0); floatingView.createFloatingView(); return; } // oppo 点击设置图标>应用权限管理>按应用程序管理>我的app>我信任该应用 // 点击权限隐私>自启动管理>我的app appIntent = context.getPackageManager().getLaunchIntentForPackage("com.oppo.safe"); if(appIntent != null){ context.startActivity(appIntent); floatingView = new SettingFloatingView(this, "SETTING", getApplication(), 1); floatingView.createFloatingView(); return; } Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if(Build.VERSION.SDK_INT >= 9){ intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); intent.setData(Uri.fromParts("package", getPackageName(), null)); } else if(Build.VERSION.SDK_INT <= 8){ intent.setAction(Intent.ACTION_VIEW); intent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails"); intent.putExtra("com.android.settings.ApplicationPkgName", getPackageName()); } startActivity(intent); }
还有酷派、魅族、HTC等等公司里没有机型,还不知道结果是怎么样的,如果有现成手机的,可以测一下分享一下,谢谢 •_^
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件