Android Permission 权限详解

16 篇文章 2 订阅
订阅专栏

其实官方文档权限这部分解释的挺清楚的,官方文档也都有能说清的时候和说不清的时候,但不论是否易懂,官方文档都是最权威的,喜欢的童鞋可以查看官方文档:https://developer.android.google.cn/guide/topics/permissions/overview

如果有童鞋不喜欢看很长的官方文档就看我总结的吧:

1.Android的权限改革的一个很明显的分界线是Android 6.0(Api=23),在这之前,只需要在AndroidManifest.xml声明应用需要的权限(需要提醒的是users-permission  不是permission,还有再application标签前,再有就是name别写错,可以用ctrl点击试一下。我就在后面多加了一个空格,搞了半天,找不到问题,明明授权了,应用给的回复也是你没有这个权限。),在用户安装应用的时候,统一授权

而在这之后,不仅需要这样声明(别忘了),还需要在使用到该权限时动态请求相应的权限,这个改革讲道理是合理的,因为用户可能在使用应用时,并不使用其中的一个功能,而这个功能需要权限,那就没必要在安装时统一授权。这样的改革会让开发者麻烦一些,Android 6.0  23之后就要写动态授权的代码逻辑了。同时还会造成一个问题,用户就需要一个一个权限去允许,点多少次。所以android 又出现了权限组的概念,文档中有一段这样的话

这样就中和了,请求频繁的问题,我是这么认为的。

需要注意是官方的提醒:不要因为权限组的设计就逻辑上利用这个,因为andorid版本不同分组可能不一样。

2.那我们就接着先说一下权限的分类,分类中各有什么权限,以及权限组有哪些,里面各有什么权限:

权限分为几个保护级别。保护级别影响是否需要运行时权限请求:

  1. Normal permissions 正常权限
  2. Signature permissions 签名权限
  3. Dangerous permissions 危险权限

需要我们了解的是正常权限和危险权限。

正常权限

正常的权限覆盖了应用程序需要访问沙箱之外的数据或资源的区域,但这些区域对用户隐私或其他应用程序的操作几乎没有风险。例如,设置时区的权限是正常的权限。
如果应用程序在它的清单中声明它需要一个正常的权限,系统会在安装时自动授予该权限。系统不提示用户授予正常权限,用户也不能撤销这些权限。

  • ACCESS_LOCATION_EXTRA_COMMANDS

  • ACCESS_NETWORK_STATE

  • ACCESS_NOTIFICATION_POLICY

  • ACCESS_WIFI_STATE

  • BLUETOOTH

  • BLUETOOTH_ADMIN

  • BROADCAST_STICKY

  • CHANGE_NETWORK_STATE

  • CHANGE_WIFI_MULTICAST_STATE

  • CHANGE_WIFI_STATE

  • DISABLE_KEYGUARD

  • EXPAND_STATUS_BAR

  • GET_PACKAGE_SIZE

  • INSTALL_SHORTCUT

  • INTERNET

  • KILL_BACKGROUND_PROCESSES

  • MODIFY_AUDIO_SETTINGS

  • NFC

  • READ_SYNC_SETTINGS

  • READ_SYNC_STATS

  • RECEIVE_BOOT_COMPLETED

  • REORDER_TASKS

  • REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

  • REQUEST_INSTALL_PACKAGES

  • SET_ALARM

  • SET_TIME_ZONE

  • SET_WALLPAPER

  • SET_WALLPAPER_HINTS

  • TRANSMIT_IR

  • UNINSTALL_SHORTCUT

  • USE_FINGERPRINT

  • VIBRATE

  • WAKE_LOCK

  • WRITE_SYNC_SETTINGS

危险权限

那除了签名权限和普通权限,剩下的就都是危险权限,很多就不详细列举了。我们主要也是要对危险权限动态授权,官方是这么说的

权限组

 

权限组

权限
CALENDARREAD_CALENDAR
WRITE_CALENDAR
CAMERACAMERA
CONTACTSREAD_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
LOCATIONACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
MICROPHONERECORD_AUDIO
PHONEREAD_PHONE_STATE
CALL_PHONE
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
SENSORSBODY_SENSORS
SMSSEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGE

READ_EXTERNAL_STORAGE

 

WRITE_EXTERNAL_STORAGE

 

3.最后说一下动态授权怎么使用:声明权限再AndroidManifest.xml  就不贴上去了,最基本的,java代码应该怎么写逻辑呢,官方也给出了示范代码:我做了一些注释

if (ContextCompat.checkSelfPermission(
        CONTEXT, Manifest.permission.REQUESTED_PERMISSION) ==
        PackageManager.PERMISSION_GRANTED) {   //检查是否有该权限
    // You can use the API that requires the permission.
    performAction(...);   //已经获取权限后做自己的功能逻辑
} else if (shouldShowRequestPermissionRationale(...)) {//如果用户选择了已经知道了,不再提醒,这个方法就返回true,你就可以在这里提醒用户,你点了不再提醒,你要用xx功能,那你就自己去授权吧,或者开发者自己做引导的逻辑
    // In an educational UI, explain to the user why your app requires this
    // permission for a specific feature to behave as expected. In this UI,
    // include a "cancel" or "no thanks" button that allows the user to
    // continue using your app without granting the permission.
    showInContextUI(...);  、、
} else {   //去问用户要权限
    // You can directly ask for the permission.
    // The registered ActivityResultCallback gets the result of this request.
    requestPermissionLauncher.launch(
            Manifest.permission.REQUESTED_PERMISSION);
}

 

下面就是我自己写的通讯录的测试例子:

在主Activity中,使用的时候  检查有没有权限,没有权限请求权限

if(ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)!= PackageManager.PERMISSION_GRANTED){
                Log.i(TAG, "onCreate: request");
                if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.READ_CONTACTS)){
                    Log.i(TAG, "onCreate: shouldShowRequestPermissionRationale");
                    Toast.makeText(context,"应用不再提醒获取读取通讯录的权限,如果想获取通讯录,请到应用权限管理中给应用读取通讯录的权限",Toast.LENGTH_SHORT).show();
                }else
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},1);
            }else{
                Cursor cursor1 = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
                        null, null, null, null);
                Log.i(TAG, "onCreate: 通讯录"+cursor1.getCount());
                while (cursor1.moveToNext()) {
                    int id = cursor1.getInt(cursor1.getColumnIndex(
                            ContactsContract.Contacts._ID));
                    String name1 = cursor1.getString(cursor1.getColumnIndex(
                            ContactsContract.Contacts.DISPLAY_NAME));
                    Log.i(TAG, "onCreate: 通讯录: "+id+"  "+name1);
                }
                cursor1.close();
            }

同时也要在用户做了选择权限是否授权的回调中写逻辑: 重写Activity的  onRequestPermissionsResult

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        Log.i(TAG, "onRequestPermissionsResult: "+permissions[0]+grantResults[0]);
        if(requestCode==1){
            if(grantResults[0]==0){
                Cursor cursor1 = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
                        null, null, null, null);
                Log.i(TAG, "onCreate: 通讯录"+cursor1.getCount());
                while (cursor1.moveToNext()) {
                    int id = cursor1.getInt(cursor1.getColumnIndex(
                            ContactsContract.Contacts._ID));
                    String name1 = cursor1.getString(cursor1.getColumnIndex(
                            ContactsContract.Contacts.DISPLAY_NAME));
                    Log.i(TAG, "onCreate: 通讯录: "+id+"  "+name1);
                }
                cursor1.close();
            }else {
                Toast.makeText(context,"没有得到权限,无法正常获取通讯录",Toast.LENGTH_SHORT).show();
            }
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

 

android permission(权限)
11-08
关于android permission 权限的介绍
Android权限管理之Permission权限机制及使用详解
09-01
Android系统中,权限分为两种类型:Permission权限和Runtime Permission(运行时权限)。本文将详细介绍Permission权限机制及其在Android系统中的使用。 首先,Permission权限机制是Android系统为了防止恶意软件...
Android Permission
stevenliyong 的专栏
03-03 1万+
 1. 文件(夹)读写权限 init.rc 中建立test1 test2 test3 文件夹mkdir /data/misc/test1 0770 root root    mkdir /data/misc/test2 0770 wifi wifimkdir /data/misc/test3 0770 system misc  其中test1 目录的owner是
Android权限实现和执行
最新发布
SouthernNights的博客
08-15 902
安卓权限介绍、权限等级分类、权限动态/静态注册/申请使用、四大组件权限执行
Android Permission详解
thewebcode
04-07 390
Android系统构造在Linux系统之上,因此它采用了和Linux类型的权限隔离机制,也就是说,每个应用使用独立的系统标识(组标识加用户标识)来运行。部分系统应用也使用某个系统标识独立开来。底层的Liunx系统从而使得不同应用之间以及应用和系统之间隔离开来。 Android通过Permission权限)机制进一步强化系统安全,通过Permssion来限制某个进程可以执行的操作,为访问某些特定的...
Android权限permission)大全
热门推荐
顾林海
04-21 2万+
此文章由情绪控撰写,转载请注明此处!!!   个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持!   1.android.permission.WRITE_USER_DICTIONARY 允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS 写入Google在线同步设置 3.android...
Android权限Permissions)
Momo_Da的博客
09-28 2634
Android里面的权限是一种安全机制。Android权限主要用于限制应用程序内部某些具有限制性的功能使用,以及应用程序之间的组件访问。但是呢Android6.0之后,Google对权限做了一些优化,将一些权限的申请放在了应用运行的时候去申请(动态获取权限),所以Android6.0之后将权限向分为两类:Normal Permissions(正常权限,一般涉及用户隐私的风险比较小,系统会自动向应用授予该权限)、Dangerous Permission(敏感权限,一般是涉及到用户隐私的,用户必须明确向应用授予
AndroidPermission权限机制的具体使用
09-03
本篇文章将深入探讨Android中的Permission权限机制,特别是权限级别(protection level)和ICC(inter-component communication)权限保护。 首先,让我们来看一下权限级别。权限级别是每个Permission的属性,它...
android 权限大全
07-22 2283
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限  获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米  获取精确位置 android.permiss
Android permission
11-22
Android permission Android permission
android.permission大全
04-14
android.permission大全文档,列出所有android开发中需要添加的Permission,有详细的中文说明
android权限permission
King的专栏
08-06 607
程序可以读取设备外部存储空间(内置SDcard和外置SDCard)的文件,如果您的App已经添加了“WRITE_EXTERNAL_STORAGE ”权限 ,则就没。必须要求textservice(例如吗 spellcheckerservice),以确保只有系统可以绑定到它。允许程序告诉appWidget服务需要访问小插件的数据库,只有非常少的应用才用到此权限。允许程序获取账户验证信息,主要为GMail账户信息,只有系统级进程才能访问的权限。允许程序创建一个永久的Activity,该功能标记为将来将被移除。
Android Permission大全1.0最终版本
weixin_30718391的博客
10-23 96
Android Permission大全出自1.0 SDK中记录着新改变的访问权限许可。程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求,Android开发网已经翻译并使用中英文对照,完整列表如下:android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问"properties"表在checkin数据库中,改值可以...
Android Permission 大全
wongstar的专栏
06-19 215
Android Permission大全出自1.0 SDK中记录着新改变的访问权限许可。程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求,Android开发网已经翻译并使用中英文对照,完整列表如下:   android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问"properties"表在checkin数据库...
安卓权限
燕皇槟枳的博客
12-21 487
权限代码: 1.android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写入Google在线同步设置 3.android.permission.WRITE_SOCIAL_STREAM读取用户的社交信息流 4.android.permiss
android permissions,PermissionsAndroid
weixin_31662303的博客
05-27 353
仅适用于非沙盒项目The following section only applies to projects with native code exposed. If you are using the managed expo-cli workflow, see the guide on Permissions in the Expo documentation for the appropr...
Android应用权限详解:uses-permission标签全面解析
Android权限操作之uses-permission详解深入解析 在Android应用开发中,权限管理是至关重要的环节,因为这关系到用户隐私和系统的安全。《Android权限操作之uses-permission详解》这篇文章详细探讨了Android系统中`...
写文章

热门文章

  • com/android/tools/idea/gradle/run/OutputBuildAction has been compiled by a more recent version of th 18332
  • 最新Android WebView Websettings设置, Android WebView加载网页布局错乱, 在Android4.4新版本之后WebSettings新增设置。 10906
  • Android setcompounddrawables 无效,图片不显示 8727
  • android app 跳转到微信 8318
  • Android ImageView scaleType+adjustViewBounds两个属性详解 保证图片不变形 7845

分类专栏

  • Android 基础知识整理 16篇
  • 华为鸿蒙 1篇
  • Framework 4篇
  • 源码解析 21篇
  • Jetpack 2篇
  • 网络通信 2篇
  • Andorid工具 3篇
  • ffmpeg 1篇
  • android错误 4篇
  • android控件详解 5篇
  • android 遇到的问题 17篇
  • 自定义view 1篇
  • 开源 2篇
  • jni和ndk开发 4篇
  • java 6篇

最新评论

  • okhttp post请求 header post参数加密遇到的两个问题

    xiaowang_lj: 我也做了 怎么说这个公司是干啥呢

  • okhttp post请求 header post参数加密遇到的两个问题

    2301_77986156: 你这个案例和网上一家公司的测试题一模一样

  • Android 四大组件(一)Activity详解

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)提升标题与正文的相关性;(2)增加条理清晰的目录。

  • com/android/tools/idea/gradle/run/OutputBuildAction has been compiled by a more recent version of th

    xuanwenchao: 还是你这个方案最靠普!点赞!

  • Android ObjectBox 数据库避坑Duplicate files copied in APK lib/armeabi-v7a/libobjectbox.so

    zhouzhihao_07: 这是两个实体,虽然结构一样只是名称不一样。

最新文章

  • Android Framework之Pkms详解
  • Android Framework 之WMS详解
  • Android Framework 之AMS详解
2024年10篇
2023年24篇
2022年21篇
2021年4篇
2020年7篇
2016年20篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家武汉玻璃钢家具雕塑玻璃钢雕塑打石开封太湖石玻璃钢雕塑上海玻璃钢金属雕塑花朵玻璃钢景观雕塑厂莱州玻璃钢花盆花器宁夏动物玻璃钢雕塑哪家好重庆商场美陈玻璃钢卡通雕塑吉林玻璃钢卡通雕塑蔬菜尺寸圆柱形玻璃钢花盆价格商场吊挂美陈福建玻璃钢花盆设计迪庆玻璃钢雕塑订购深圳超市商场美陈市场价昆明大型玻璃钢雕塑昌吉玻璃钢雕塑制作厂家商场美陈 英语韶关人像雕塑玻璃钢上海大型玻璃钢雕塑常用解决方案盘锦商场美陈宁夏广场玻璃钢雕塑订做浙江常见商场美陈批发价鄂尔多斯玻璃钢雕塑联系方式济南动物玻璃钢雕塑供应商云南抽象玻璃钢雕塑定制山东大型商场美陈订购江门透明玻璃钢雕塑定做青花瓷玻璃钢花盆价格表专业玻璃钢雕塑可量尺定做农民人物玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化