Android开发——Android M(6.0) 权限解决方案

android sdk6.0 权限控制方法(方案) Android M 新的运行时权限机制,很多开发者都知道,有危险的权限就要先申请权限才能使用相应的功能,不然会让app漰掉。 但有什么好的方法封装呢?而有些手机定位又有一个坑! 1.首先,先了解6.0权限机制:Android M 新的运行时权限开发者需要知道的一切 2.查看GitHub上面大神写的:GitHub PERMISSION进行了上面二步,你可以从github时选择一个库来开发app。 阅读详情

Android开发——Android M(6.0) 权限解决方案

自从Android M(6.0)发布以来,权限管理相比以前有了很大的改变,很多程序员发现之前运行的好好的Android应用在Android M上无法运行。本文现在把Android M中经常遇到的权限问题总结出来,并且给出相应的解决方案,分享给Android程序员兄弟们,希望给他们的开发工作带来帮助。

有一篇全面介绍Android M 运行时权限文章写的非常全面(翻译的):Android M 新的运行时权限开发者需要知道的一切,但是实施过程中还是遇到一些坑。

坑一:用Android5.0编译的apk,在Android6.0上运行完全没有问题。

在Android6.0以上才需要在运行时请求权限,在旧Android版本上保留原有逻辑,安装时授予权限。
用旧版本sdk编译的apk,都使用旧版本权限方式,安装时授予权限。(也就是说:兼容旧版本)
用Android6.0(targetSdkVersion 23)编译apk才需要处理新的权限问题。
还有一个蛋疼的问题:程序运行当中,用户关闭了权限,会发生什么?(还未知)

坑二:蓝牙扫描需要位置权限

BluetoothUtils: Permission denial: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results

如何申请一个权限:用ACCESS_COARSE_LOCATION举个栗子这里写图片描述

1. Manifest添加权限

Android6.0分了几种权限:Normal Permissions(安装时自动授权,用户也不能取消权限)(链接需要板凳) and Dangerous Permissions(链接需要板凳)

<!-- Android6.0 蓝牙扫描才需要-->
    <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>

2. 请求权限

//判断是否有权限
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.ACCESS_COARSE_LOCATION)
        != PackageManager.PERMISSION_GRANTED)

//请求权限
ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);
//判断是否需要 向用户解释,为什么要申请该权限
ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                Manifest.permission.READ_CONTACTS)
//权限申请结果
onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults)

坑三:Fragment请求权限

//如果使用ActivityCompat.requestPermissions,不会调用onRequestPermissionsResult()
//请求权限
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);
//判断是否需要 向用户解释,为什么要申请该权限
shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS)

坑四:WRITE_SETTINGS权限怎么处理

android.permission.WRITE_SETTINGS不能自动授权,也不能运行时请求授权,咋整啊?通过打开Intent来让用户设置。貌似SETTINGS的权限只能这么处理,from CommonsWare research Android 6.0 changes.

/**
     * An app can use this method to check if it is currently allowed to write or modify system
     * settings. In order to gain write access to the system settings, an app must declare the
     * {@link android.Manifest.permission#WRITE_SETTINGS} permission in its manifest. If it is
     * currently disallowed, it can prompt the user to grant it this capability through a
     * management UI by sending an Intent with action
     * {@link android.provider.Settings#ACTION_MANAGE_WRITE_SETTINGS}.
     *
     * @param context A context
     * @return true if the calling app can write to system settings, false otherwise
     */
     if(!Settings.System.canWrite(this)){
          Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS,
                    Uri.parse("package:" + getPackageName()));
          startActivityForResult(intent, REQUEST_CODE);
     } 

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE) {
            if (Settings.System.canWrite(this)) {
                //检查返回结果
                Toast.makeText(MainActivity.this, "WRITE_SETTINGS permission granted", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "WRITE_SETTINGS permission not granted", Toast.LENGTH_SHORT).show();
            }
        }
    }

其他类似文章参考:
1.探索新的Android权限模式

2.Android M 新的运行时权限开发者需要知道的一切
原文Everything every Android Developer must know about new Android’s Runtime Permission

Android 蓝牙权限(更新到 Android 12) 访问设备位置的权限。在 Android 6.0 及以上版本中,需要获取位置权限才能扫描附近的蓝牙设备。:管理蓝牙适配器的权限,包括启用/禁用蓝牙、扫描设备和进行配对等操作。:在后台访问设备位置的权限。该权限通常在后台扫描蓝牙设备时使用。:访问蓝牙适配器的权限,用于执行蓝牙操作。需要手机开启定位服务。 阅读详情

相关推荐

Android6.0(Android M) 悬浮窗被禁用,无权限开启悬浮窗的解决方案

Android6.0的机子默认不开启悬浮窗权限,即使在Manifest文件中给予了权限依然会报permission deny的错误,本博文给出解决方案

一叶知秋的专栏 5万+

[异常解决] 安卓6.0权限问题导致老蓝牙程序出现异常解决办法:Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission......

  一、问题:   之前写的一款安卓4.4的应用程序,用来连接蓝牙BLE,而现在拿出来用新的AS编译(此时SDK为6.0,手机也是6.0)应用程序并不能搜索到蓝牙,查看log总是报权限错误: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission...   二、解决过程:   但是,我把相应的权限加入manifest...

weixin_33829657的博客 889

Android M 新的运行时权限开发者需要知道的一切

本文来自微凉一季的博客http://jijiaxin89.com/2015/08/30/Android-s-Runtime-Permission/ 更多文章点击跳转微凉一季 tags: 翻译,这是一篇译文。android M 的名字官方刚发布不久,最终正式版即将来临! android在不断发展,最近的更新 M 非常不同,一些主要的变化例如运行时权限将有颠覆性影响。惊讶的是android社区鲜

微凉一季的专栏 2077

Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan r

安卓6.0多了新的特性,也就是打开app时,经常会提醒你是否允许xx应用获取xx权限,这就是新特性的表现。 也就是说,有的权限,光是在manifest里获取还不够,还要让用户手动允许才能获得这项权限 如果只在manifest里面写,而不让用户手动获取,则会崩溃并报类似 Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permis

柴犬犬舍 6121

【已解决】Android 6.0权限设置,导致程序崩溃

Android 6.0发布之后,谈到权限问题,为了保护用户更多的隐私,每次调用权限的时候,都要给用户提示,方便了用户,程序员们可是有的忙了,不过问题已解决。 解决如下:写一个工具类 /** * 权限类 * Created by wangguolion 2015/12/3. */ public class RequestPermissionUtil { public Reques

Biligle的博客 6719

关于android6.0动态权限造成的app crash问题

今天我们为公司内部员工开发的app出现了一个bug,因为我们的app要绑定imei所以我就读取imei并且有个权限READ_PHONE_STATE就是这个权限出现了问题,我就纳闷了怎么会有问题呢,我已经在manifest上声明了,然后我就看一下他的android版本6.0(什么时候国产手机系统跟进竟然这么快了!),我就去搜了一些相关资料才发现是android6.0涉及到隐私的权限是动态的,也就是说

qq_14967667的专栏 5261

android api23及以上版本报Permission Denial异常处理方法

今天在写一个电话拨号器时出现了一个问题,输入电话号码点击拨打出现闪退的情况,报Permission Denial异常,但是配置文件里已经这样写了啊还是报错,经过查阅发现api22之后对危险权限把控得比较严,不能仅仅这样配置,具体可以看谷歌文档https://developer.android.com/training/permissions/requesting.html下面说说我的实际解决办法:...

峰子的博客 2844

android相机权限适配遇到的坑(包含6.0和6.0以下)

我们都知道,google在6.0以后加强了应用权限的管理,我们也能通过标准的方法去申请权限,但是由于一些厂商的修改,在适配过程中我们会遇到各种各样的问题。在6.0之前,也可能会因为用户的一些设置导致我们无法获取权限。6.0以下系统* 打开系统相机常规来说不需要相机权限。但是如果手机root了,并且使用获得root权限(未获取root权限设置不起作用)的安全管理(如LBE,开启主动防御后)软件管理权限

android_cyw的博客 6572

指纹模块开发-FPW(M)指纹系列产品

根据杭州蚁创科技有限公司《FPW(M)指纹系列产品开发手册》编写, 仅适用对应硬件,留作备忘。 1. 添加权限: &amp;lt;uses-feature android:name=&quot;android.hardware.usb.host&quot; android:required=&quot;true&quot; /&amp;gt; &amp;lt;uses-permission android:name=&quot;andro

vchao的博客 2377

Android 8.1 9.0 10.0 在系统app安装第三方app弹出 解析安装包出现问题 的解决方案

在系统app中用代码调用系统安装接口安装app时抛出Permission Denial: that is not exported from UID 1000的异常时,通常是由于Uri权限导致的问题 代码如下: File apk = new File(...); Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FL

安卓兼职framework和app工程师的博客 2878

gesp c++ 五级知识点

gesp c++ 五级知识点

MMD.然大大 2009

Android 6.0/7.0权限

Android6.0动态权限控制在Android6.0(M)之前,在用户安装应用的时候会产生一个权限列表,只有用户允许这些权限后,应用才可以正常的安装,这就会产生一个问题,这些权限对用户是不具有感知性的,也就是说用户都不知道你要这些权限干什么,我明明装的是一个阅读类型的应用,你却要我拨打电话的权限,你想干嘛呢?当然绝大部分的开发者是善意的,但也避免不了一些特殊人群利用这些“漏洞”做一些不好的事情。而

水寒 2589

iOS自动化之打包-xcodebuild命令行打包.app并安装到ios模拟器

xcode xcodebuild xcrun ios模拟器 iOS UI自动化测试 ios自动打包安装到ios模拟器

z12347891的博客 5074

Android开发——Android 6.0权限管理机制详解

0.前言 最近在研究所实习,我负责维护Android手机取证项目的Android客户端,有客户反映我们的APP在Android6.0无响应,经过调试发现SD卡读写权限权限被拒绝。但明明是在AndroidManifest.xml文件中声明过的。查了很多资料才知道Android6.0的很多权限申请机制发生了改变,可以说是Android6.0在安全机制上更进了一步吧,因此写下这篇文章以记录。...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

【项目分享】RailTracker: 火车票务数据采集与分析

从12306使用爬虫爬取火车站及车次信息、火车票价 通过本项目,我们将带领访问者手把手完成火车票数据采集、数据清洗、数据集成、可视化的一整个流程!

zhushatong的博客 3344

ArcGIS符号库下载 | 制图规范、三调、1:1万地形图、土地利用总体规划图.....

最近整理了一些符号库 涉及的类型比较多 包含有三调的(二调的也加上去了),一些点线面符号库,1:1万地形图,1:5万土地利用,土地利用总体规划图

qq_43173805的博客 2万+

Android6.0 动态权限组

一、Android系统权限机制概述 我们知道在Android的权限系统一直是首要的安全概念,因为这些权限在Android M(6.0)之前在AndroidManifest文件中声明之后,仅App在安装的时候被询问一次,安装成功之后运行,就可以在用户毫不知晓的情况下访问权限内的内容,毫无顾忌地收集信息(虽然现在也还是可以在一次申请之后无顾忌的使用)。而在Android M之后,app将不会在...

kdsde的专栏 2454

【即插即用模块】Transformer篇 | MICCAI 2025 | ReLULA:Q/K双ReLU线性注意力,既轻又准!

本文介绍了一种基于线性注意力的多实例学习模块(Lin-MIL),适用于高分辨率视觉任务。该模块通过转置计算顺序和使用ReLU激活,将计算复杂度从O(n²d)降至O(nd²),同时提升特征判别性。核心创新包括Q/K双ReLU激活、可学习温度系数和数值稳定归一化。实验表明,该模块在轻量化视觉任务中优于传统线性注意力和Mamba架构。代码实现了模块化矩阵乘法,支持即插即用替换ViT自注意力层。该模块特别适合计算病理学等需要处理大量图像补丁的任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 140

Android6.0 获取定位权限(动态权限)

private static final int BAIDU_READ_PHONE_STATE = 100;//定位权限请求 private static final int PRIVATE_CODE = 1315;//开启GPS权限 private LocationManager lm; /** * 检测GPS、位置权限是否开启 ...

ykx_1448488568的博客 4768

74.9008深度刷机原理|高通QPST/Firehose底层刷写协议详解

移动设备刷机与底层维修技术指南 本文为移动设备维修人员和高级玩家提供全面的刷机与底层维修技术指南,涵盖高通、联发科和苹果A系列芯片的主要操作。 主要内容 核心操作:Bootloader解锁、Fastboot刷写、EDL深度修复、iTunes DFU模式恢复和分区表重建 适用场景:系统故障修复、底层损坏恢复、安全限制解除、系统降级和深度硬件维修 关键技术:详细解析刷机协议栈层级、关键分区作用和刷机安全机制 操作步骤: 环境搭建与驱动安装 Bootloader解锁(以小米为例) 高通机型系统刷写 苹果设备DFU

2601_95651806的博客 205

Open3D(C++) 读取、可视化并保存点云【2025最新版】

博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 4617

Android (6.0) M 请求权限

b

plxiaopan的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Android6.0以上权限申请

Android6.0以上权限单个、多个申请

学习是修养的提升 3007

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 6.0 动态权限解决方案

本文转载自:http://blog.csdn.net/yanzhenjie1003/article/details/52503533 Android 6.0 运行时权限管理最佳实践 版权声明:转载必须注明本文转自严振杰的博客: http://blog.yanzhenjie.com 这是一篇迟来的博客,Android M已经发布一年多了(6.0的变化),在Andro

wangsfine的博客 6085

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: Android Studio快捷键提高工作效率的奇技
下一篇: Android M 新的运行时权限开发者需要知道的一切
YLBF_DEV
博客等级 码龄12年 30粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值