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

本人使用小米手机,打开qq或者微信的时候,某个权限拒绝的话,会提示你开启,点击开启会跳转到app的权限设置界面,当然了,这是国内系统深层定制的原因,也就是说这个界面原声的android没有的!这里以小米和魅族作为示例讲解如何让用户手动打开权限,当然了如果是原声的android就让他跳转到应用的详情设置页面(有点坑,因为普通用户还是不知道怎么整)。

参考了很多零零碎碎的东西,网址已经找不到了。。。。。。

ok,第一步是跳转到系统的界面,下面基本上可以从9开始考虑了,可以简化。

String SCHEME = "package";

//调用系统InstalledAppDetails界面所需的Extra名称(用于Android 2.1及之前版本)

final String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";

//调用系统InstalledAppDetails界面所需的Extra名称(用于Android 2.2)

final String APP_PKG_NAME_22 = "pkg";

//InstalledAppDetails所在包名

final String APP_DETAILS_PACKAGE_NAME = "com.android.settings";

//InstalledAppDetails类名

final String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";

Intent intent = new Intent();

final int apiLevel = Build.VERSION.SDK_INT;

if (apiLevel >= 9) { // 2.3(ApiLevel 9)以上,使用SDK提供的接口

intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

Uri uri = Uri.fromParts(SCHEME, getPackageName(), null);

intent.setData(uri);

} else { // 2.3以下,使用非公开的接口(查看InstalledAppDetails源码)

// 2.2和2.1中,InstalledAppDetails使用的APP_PKG_NAME不同。

final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22

: APP_PKG_NAME_21);

intent.setAction(Intent.ACTION_VIEW);

intent.setClassName(APP_DETAILS_PACKAGE_NAME,

APP_DETAILS_CLASS_NAME);

intent.putExtra(appPkgName, getPackageName());

}

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

第二个,miui,首先你得判断是miui,亲自测试,MIUI7稳定版,MIUI8开发板本可行,工具类下面会提供下载

if (CheckPhoneSystemUtils.isMIUI()) {

MLog.i("产品/硬件的制造商小米:");

intent.setAction("miui.intent.action.APP_PERM_EDITOR");

intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");

intent.putExtra("extra_pkgname", getPackageName());

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

try {

startActivity(intent);

} catch (Exception e) {

e.printStackTrace();

Toast.makeText(MediaRecoderService.this, "只有MIUI才可以设置哦", Toast.LENGTH_SHORT).show();

}

}

第三个,flyme(由于没有flyme机子),采用的云手机测试的

else if (CheckPhoneSystemUtils.isFlyme()) {

intent.setAction("com.meizu.safe.security.SHOW_APPSEC");

intent.addCategory(Intent.CATEGORY_DEFAULT);

intent.putExtra("packageName", getPackageName());

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

try {

startActivity(intent);

} catch (Exception e) {

e.printStackTrace();

Toast.makeText(MediaRecoderService.this, "只有Flyme才可以设置哦", Toast.LENGTH_SHORT).show();

}

}

下面是工具类:BuildProperties

public class BuildProperties {

private final Properties properties;

private BuildProperties() throws IOException {

properties = new Properties();

properties.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));

}

public boolean containsKey(final Object key) {

return properties.containsKey(key);

}

public boolean containsValue(final Object value) {

return properties.containsValue(value);

}

public Set> entrySet() {

return properties.entrySet();

}

public String getProperty(final String name) {

return properties.getProperty(name);

}

public String getProperty(final String name, final String defaultValue) {

return properties.getProperty(name, defaultValue);

}

public boolean isEmpty() {

return properties.isEmpty();

}

public Enumeration keys() {

return properties.keys();

}

public Set keySet() {

return properties.keySet();

}

public int size() {

return properties.size();

}

public Collection values() {

return properties.values();

}

public static BuildProperties newInstance() throws IOException {

return new BuildProperties();

}

CheckPhoneSystemUtils

private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";

private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";

private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";

/**

* 检测MIUI

*

* @return

*/

public static boolean isMIUI() {

try {

final BuildProperties prop = BuildProperties.newInstance();

return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;

} catch (final IOException e) {

return false;

}

}

/**

* 检测Flyme

*

* @return

*/

public static boolean isFlyme() {

try { // Invoke Build.hasSmartBar()

final Method method = Build.class.getMethod("hasSmartBar");

return method != null;

} catch (final Exception e) {

return false;

}

}

以上这篇Android 6.0以上权限拒绝打开权限设置界面的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爱奇艺视频如何联系客服?爱奇艺联系客服攻略

爱奇艺视频是一款不错的视频,小编在闲的无聊的时候,就会使用爱奇艺来看视频,相信你们也会使用爱奇艺视频来看视频,我们在使用爱奇艺的时候,就会遇到些问题,今天小编为你介绍下:爱奇艺视频如何联…

android显示圆圈动画,Android实现3个圆圈的动画

实现了一个类似Windows进度条效果,界面上有三个圆圈,依次有一个圆圈显示白色,其它的圆圈显示蓝色。画圆圈的Viewimport android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Pai…

谷歌浏览器怎么下载视频 Google Chrome下载视频方法

核心提示:现在我来教大家谷歌浏览器怎么下载视频 Google Chrome下载视频方法。 谷歌浏览器怎么下载视频 Google Chrome下载视频方法 我们经常会在线看一些网页视频,但是网站的视频下载都只支持自己的客户端,如果每家网站的客户端都安装的话那…

android sdk64位资源,android SDK 有32位或64位的分别吗

android环境下搞开发工作,原来用的是32位的(操作系统32位、Eclipse、JDK 都是32位)。现在换了win7 64位系统, Eclipse、JDK 有32位或64位的, 问一下,android SDK 有32位或64位的分别吗?32位环境下(操作系统32位、Eclipse、JDK 都是32位)更新过 android …

Google Chrome(谷歌浏览器)安装方法与使用技巧

核心提示:Google Chrome(谷歌浏览器)的特点是简洁、快速。Google Chrome支持多标签浏览,每个标签页面都在独立的“沙箱”内运行,在提高安全性的同时,一个标签页面的崩溃也不会导致其他标签页面被关闭。此外,Google Chr…

android 单元测试 回调,android – 如何为retrofit2回调进行单元测试?

我无法尝试,但它应该工作.也许你必须修复泛型类型像mock这样的错误(Call.class);.Testpublic void should_test_on_response(){Call onResponseCall mock(Call.class);doAnswer(invocation -> {Response response null;invocation.getArgumentAt(0, Callback.class).onRes…

Chrome浏览器显示“网站连接不安全”怎么解决?解决方法分享

chrome浏览器是一个非常受欢迎的搜索服务软件,这款软件可以满足用户非常多搜索需求,有很多用户都会使用这款软件进行搜索,功能非常的全面,但是在使用Chrome浏览器的也会遇到一般浏览器都会遇到的问题,今天小编就会与大…

android registerreceiver() 参数,android-registerReceiver无法正常工作

我正在尝试处理我的主类中的推送通知(并且我也有GCMBroadcastReceiver-用于我未运行主类时出现的所有通知)但是registerReceiver无法正常工作(GCMBroadcasrReceiver正常工作)我的代码:public class Main extends Activity {protected void onCreate(Bundle savedIns…

如何在Chrome浏览器中创建账户?

chrome浏览器是一款非常特殊的浏览器,不仅有非常多的用户喜欢使用这款软件,有很多开发者也非常喜欢使用这款软件,在使用浏览器的时候创建账号是一种最简单的方法,其实操作起来非常的简单、方便,但不是所有的人都会在Ch…

IE或Chrome浏览器玩Xbox游戏能实现吗

IE或Chrome浏览器玩Xbox游戏能实现吗?根据海外媒体报道,微软正在研发一种在PC网页浏览器当中串流Xbox游戏的技术。据称该技术支持Xbox One和Xbox 360游戏,可通过IE或Chrome获取。   在去年,微软就曾经展示过Windows Phone设备在云技术的帮…

android 日程安排view,RecyclerView 列表控件中简单实现时间线

时间时间,时间,时间啊;走慢一点吧~看见很多软件中都有时间线的东西,貌似天气啊,旅游啊什么的最多了;具体实现方式很多,在本篇文章中讲解一种自定义View封装的方式。效果先来看看效果…

小技巧来助阵 玩转Chrome浏览器

核心提示:Chrome问世已经有段时间了,相关的应用技巧也开始被挖掘出来,这里小编教你3则小技巧,让Chrome更满足你的需求。 Chrome问世已经有段时间了,相关的应用技巧也开始被挖掘出来,这里小编教你3则小技巧…

chrome浏览器遭eFast浏览器恶意软件删除取代

近日,有一款称为 eFast 浏览器的新恶意软件。该恶意软件从表面上看起来很像谷歌浏览器,但它会执行删除Chrome浏览器的操作,然后自我安装替代Chrome浏览器,并将自身设置为默认浏览器。之后,当你打开“浏览器”时&#x…

android rxjava2 简书,RXJava2学习

什么是RxJava一个可观测的序列来组成异步的、基于事件的程序的库。(简单来说:它就是一个实现异步操作的库)RxJava 好在哪?RxJava 其实就是提供一套异步编程的 API,这套 API 是基于观察者模式的,而且是链式调用的,所以使用 RxJava…

谷歌Chrome:将逐步阻止浏览器不安全下载内容

谷歌浏览器是一款非常好用的浏览服务软件,用户可以使用手机获取更多的线上内容,随时都可以使用手机下载想要的内容,这款软件最近对于功能进行了更改,用户在使用这款软件下载应用和需要的资讯时,会对下载的内容更加的严…

最新版谷歌浏览器Chrome45版本性能提升

最新版谷歌浏览器Chrome45版本性能提升 最新发布的Chrome 45版本内存消耗暴减1/4 性能大提升。距离上个v44版本发布已经10多天了,伴随着全新Logo,xx近日推出了首个v45版本:45.0.2454.85,而在实测中,Crome 45在实测中比…

android如何获得开发者权限,Android 动态权限获取 超级简单的方式

1.添加依赖implementation com.werb.permissionschecker:permissionschecker:0.0.1-beta22.声明 写你想要获取的权限private PermissionChecker permissionChecker;static final String[] PERMISSIONS new String[]{Manifest.permission.RECORD_AUDIO,//写你想获取的权限Manif…

chrome浏览器手机版怎么设置中文

chrome谷歌浏览器手机版怎么设置中文 chrome浏览器手机版怎么设置中文?手机chrome浏览器英文版改成中文需要在语言设置中改变语言选项,具体步骤如下: 1、打开手机chrome浏览器,点击右上角的菜单按钮 2、弹出菜单界面,找到Setti…

无尽包围html5游戏在线玩,小团体激发潜能小游戏突破自我

缩小包围圈游戏其实是一个不可能完成的任务,但是它会给游戏者带来无尽欢笑,使小组充满活力,让队员们能够自然地进行身体接触和配合,消除害羞和忸怩感,创造融洽的气氛,为后续工作的开展奠定良好基础。可以作…

安卓版谷歌浏览器怎么样 Android版Chrome评测

安卓版谷歌浏览器怎么样 Android版Chrome评测 Android安卓版谷歌浏览器怎么样?在众多Android手机用户的苦苦期盼之下,Android版xx Chrome移动浏览器终于发布了,虽然目前还是beta版本但是已经可以让我们痛快的体验一下。我花了几乎一整天的时间进行了比较…