权限文件标识符
??在是使用Android studio的Device File Explorer的时候,可以看到文件的各种权限,permissions使用的10位字段表示。 ** ??在Android中,每一个应用是一个独立的用户,对于10位字段的权限标识符 drwxrwxrwx **
-
第1位:d表示文件夹,-表示文件 -
第2-4位:rwx,表示这个文件的拥有者(创建这个文件的应用)用户对该文件的权限 -
r:读 -
w:写 -
x:执行 -
第5-7位:rwx,表示跟文件拥有者用户同组的用户对该文件的权限 -
第8-10位:rwx,表示其他用户组的用户对该文件的权限
权限机制
??在系统6.0之后加入了运行时权限功能,将所有权限分为了两类:普通权限和危险权限:
??普通权限是指那些不会直接威胁到用户安全和隐私的权限,对于这部分权限申请,只要在AndroidManifest.xml中添加权限申请,系统会自动帮我们进行授权。
??? 危险权限则表示那些可能会触及用户隐私或者对设备安全性造成影响的权限,如获取设备联系人信息、定位设备的地理位置等,对于这部分权限申请采取运行时权限功能,除了需要在AndroidMan-ifest.xml中添加权限申请,还需要由用户手动点击授权才可以。
危险权限有以下9组: 1、CALENDAR + READ_CALENDAR——读取用户的日历数据 + WRITE_CALENDAR——写入用户的日历数据
2、CAMERA
3、CONTACTS
- READ_CONTACTS——读取用户的联系人数据
- WRITE_CONTACTS——写入用户的联系人数据
- GET_CONTACTS——访问帐户服务中的帐户列表
4、LOCATION
- ACCESS_FINE_LOCATION——访问精确的位置
- ACCESS_COARSE_LOCATION——访问大致位置
5、MICROPHONE
6、PHONE
- READ_PHONE_STATE——只读访问电话状态
- CALL_PHONE——在不通过拨号用户界面的情况下发起电话呼叫
- READ_CALL_LOG——读取用户的调用日志
- WRITE_CALL_LOG——写入(但不读取)用户的调用日志数据
- ADD_VOICEMAIL——向系统中添加语音邮件
- USE_SIP—— 使用SIP服务
- PROCESS_OUTGOING_CALLS——查看向外呼叫期间所拨打的号码(在API 29废弃)
7、SENSORS
8、SMS
- SEND_SMS——发送SMS消息
- RECEIVE_SMS——接收SMS消息
- READ_SMS——读取SMS消息
- RECEIVE_MMS——接收WAP推送消息
- RECEIVE_WAP_PUSH——监视传入的MMS消息
9、STORAGE
- READ_EXTERNAL_STORAGE——读取外部存储
- WRITE_EXTERNAL_STORAGE——写到外部存储器
??危险权限一共有9组24种权限。需要注意的是,对于每组权限,只要用户授予了其中任何一种权限,整个权限组都会被授予给应用
自定义权限
????除了使用系统提供的权限,我们还可以自定义权限。当我们想有一个应用的Activity可以被其他应用启动,但是需要其他应用具备启动的权限时,我们就可以在自己的应用中定义一个权限,其他应用只有声明这一权限,才可以成功启动我们的Activity。
首先,在被启动应用的AndroidManifest文件中声明自定义权限,示例代码如下:
<permission
android:name="com.example.selfpermissondemo.permisson.OPEN_ACTIVITY"
android:protectionLevel="normal"
android:label="自定义权限"
??还需要在标签中声明permission属性
android:permission="com.example.selfpermissondemo.permisson.OPEN_ACTIVITY"
??在其他应用中,如果想启动该Activity,就必须在AndroidManifest文件中声明该自定义权限,否则将会抛出SecurityException异常。
<uses-permission android:name="com.example.selfpermissondemo.permisson.OPEN_ACTIVITY"></uses-permission>
?name是自定义权限的名称,protectionLevel是权限的安全级别,可以使用normal、dangerous、signature,、signatureOrSystem中的一种,label则是权限的简短描述。
-
normal表示权限是低风险的,不会对系统、用户或其他应用程序造成危害。 -
dangerous表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限。 -
signature告诉Android,只有当应用程序所用数字签名与声明此权限的应用程序所有数字签名相同时,才能将权限授给它。 -
signatureOrSystem告诉Android,将权限授给具有相同数字签名的应用程序或Android包类,这一级别适用于非常特殊的情况,比如多个供应商需要通过系统影像共享功能时。
另外一个是android:permissionGroup属性,表示一个权限组。可以将权限放在一个组中,但对于自定义权限,应该避免设置此属性。如果确实希望设置此属性,可以使用以下属性代替:android.permission-group.SYSTEM_TOOLS。
参考
权限机制 Android 文件访问权限的四种模式 详解Android权限机制
|