google中文官网阅读笔记之正常权限和危险权限

官方地址:https://developer.android.google.cn/guide/topics/security/normal-permissions.html
正常权限涵盖应用需要访问其沙盒外部数据或资源,但对用户隐私或其他应用操作风险很小的区域:也就是不需要用户同意或拒绝的权限。
下面是一些正常权限:截止到api23 也就是6.0系统
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
RITE_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
STORAGEREAD_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE

google官方也给我提供了如何自定义权限的例子:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
    <permission android:name="com.example.myapp.permission.DEADLY_ACTIVITY"
        android:label="@string/permlab_deadlyActivity"
        android:description="@string/permdesc_deadlyActivity"
        android:permissionGroup="android.permission-group.COST_MONEY"
        android:protectionLevel="dangerous" />
    ...
</manifest>

由于系统不允许带有不同签名的应用使用相同的权限声明,所以在命名的时候我们也需要按照反域名的方式。
protectionLevel这个属性是必要属性:当然他的值有很多可选项:常见的有四种

namevaluedescription
normal0普通的很低级的权限,只需要声明不需要用户手动允许的权限(正常权限)
dangerous1危险的权限,需要用户手动允许的权限
signature2拥有相同签名的软件采用有的权限
signatureOrSystem3系统和相同签名拥有的权限

permissionGroup是一个可选的属性就是属于那个权限组:我们一般默认就是android.Manifest.permission_group
需要为权限提供标签和描述。这些是用户在查看权限列表(android:label)或单一权限详细信息(android:description)时可以看到的字符串资源。标签应简短;用几个词描述权限保护的功能的关键部分。描述应该用几个句子描述权限允许持有人执行的操作。我们的约定是用两个句子描述:第一句描述权限,第二句向用户提醒为应用授予权限后可能出现的错误类型。

<string name="permlab_callPhone">directly call phone numbers</string>
<string name="permdesc_callPhone">Allows the application to call
    phone numbers without your intervention. Malicious applications may
    cause unexpected calls on your phone bill. Note that this does not
    allow the application to call emergency numbers.</string>

您可以使用 Settings 应用和 shell 命令 adb shell pm list permissions 查看系统中当前定义的权限。要使用 Settings 应用,请转到 Settings > Applications。选择一个应用并向下滚动查看该应用使用的权限。对于开发者,adb ‘-s’ 选项以类似于用户将会看到的形式显示权限:

$ adb shell pm list permissions -s
All Permissions:

Network communication: view Wi-Fi state, create Bluetooth connections, full
Internet access, view network state

Your location: access extra location provider commands, fine (GPS) location,
mock location sources for testing, coarse (network-based) location

Services that cost you money: send SMS messages, directly call phone numbers

...

检查权限还有许多其他有用的方法。如果您有另一个进程的 pid,可以使用 Context 方法 Context.checkPermission(String, int, int) 检查针对该 pid 的权限。如果您有另一个应用的软件包名称,可以使用直接的 PackageManager 方法 PackageManager.checkPermission(String, String) 了解是否已为特定软件包授予特定权限。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值