Android系统权限

Android系统权限的种类

1.正常权限

官方定义:正常权限涵盖应用需要访问其沙盒外部数据或资源,但对用户隐私或其他应用操作风险很小的区域。例如,设置时区的权限就是正常权限。如果应用声明其需要正常权限,系统会自动向应用授予该权限。

权限授予时机:应用在AndroidManifest声明的正常权限,在应用安装时由系统自动授予该权限。尽管用户在开始安装前会看到这些权限,但是系统不会向用户提示授予该权限,而且用户无法撤销该权限。

权限介绍

android.permission.ACCESS_LOCATION_EXTRA_COMMANDS允许应用访问额外的提供定位的指令

android.permission.ACCESS_NETWORK_STATE允许应用访问网络状态信息

android.permission.ACCESS_NOTIFICATION_POLICY对希望访问通知策略的应用程序的标记权限。

android.permission.ACCESS_WIFI_STATE:允许应用访问WIFI状态信息

android.permission.BLUETOOTH:允许应用连接已经配对的蓝牙设备

android.permission.BLUETOOTH_ADMIN:允许应用搜索和发现蓝牙设备

android.permission.BROADCAST_STICKY:允许应用发送sticky broadcast

android.permission.CHANGE_NETWORK_STATE:允许应用改变网络连接状态

android.permission.CHANGE_WIFI_MULTICAST_STATE:允许应用进入WIFI多播模式

android.permission.CHANGE_WIFI_STATE:允许应用改变WI-FI连接状态

android.permission.DISABLE_KEYGUARD:允许应用禁用键盘锁

android.permission.EXPAND_STATUS_BAR:允许应用展开/折叠状态栏

android.permission.GET_PACKAGE_SIZE:允许应用查看任何安装包所占用的空间

com.android.launcher.permission.INSTALL_SHORTCUT:允许应用在Launcher页面创建快捷方式

android.permission.INTERNET:允许应用访问网络连接

android.permission.KILL_BACKGROUND_PROCESSES:允许应用使用 killBackgroundProcesses(String packageName),该方法会杀死指定Package关联的所有后台进程。

android.permission.MANAGE_OWN_CALLS:允许调用程序通过ConnectionService APIs管理自己的调用

android.permission.MODIFY_AUDIO_SETTINGS:允许应用修改全局的音频设置

android.permission.NFC:允许应用通过NFC进行I/O操作

android.permission.READ_SYNC_SETTINGS:允许应用读取同步设置

android.permission.READ_SYNC_STATS:允许应用读取同步状态

android.permission.RECEIVE_BOOT_COMPLETED:允许系统启动后,应用收到ACTION_BOOT_COMPLETED通知消息

android.permission.REORDER_TASKS:允许应用改变任务的Z轴排列

android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND:允许伙伴应用在后台运行

android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND:允许伙伴应用在后台使用数据

android.permission.REQUEST_DELETE_PACKAGE:允许应用请求删除安装包,target api大于25的的应用必须持有该权限才可以使用ACTION_UNINSTALL_PACKAGE

android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS:应用必须持有该权限,才能使用 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,该权限主要用来将应用加入电池优化白名单

com.android.alarm.permission.SET_ALARM:允许应用为广播Intent信息以为用户设置提醒

android.permission.SET_WALLPAPER:允许应用设置壁纸

android.permission.SET_WALLPAPER_HINTS:允许应用设置壁纸提示

android.permission.TRANSMIT_IR:允许应用使用设备的红外传输模块,如果设备有的话

android.permission.USE_FINGERPRINT:允许应用使用指纹硬件模块

android.permission.VIBRATE:允许应用使用设备震动模块

android.permission.WAKE_LOCK:允许使用PowerManager WakeLocks防止处理器休眠或屏幕变暗

android.permission.WRITE_SYNC_SETTINGS:允许应用写入同步设置

2.危险权限

官方定义:危险权限涵盖应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他应用的操作产生影响的区域。例如,能够读取用户的联系人属于危险权限。如果应用声明其需要危险权限,则用户必须明确向应用授予该权限。

权限授予时机:危险权限因系统版本和应用的目标 SDK 级别的不同而有所差异:

  • 如果设备运行的是 Android 5.1 或更低版本,或者应用的目标 SDK 为 22 或更低:如果您在清单中列出了危险权限,则用户必须在安装应用时授予此权限;如果他们不授予此权限,系统根本不会安装应用。
  • 如果设备运行的是 Android 6.0 或更高版本,或者应用的目标 SDK 为 23 或更高:应用必须在清单中列出权限,并且它必须在运行时请求其需要的每项危险权限。用户可以授予或拒绝每项权限,且即使用户拒绝权限请求,应用仍可以继续运行有限的功能。

权限介绍

权限组 权限
android.permission-group.CALENDAR
日历相关的运行时权限
android.permission.READ_CALENDAR
允许应用读取用户日历数据

android.permission.WRITE_CALENDAR
允许应用写入用户日历数据
android.permission-group.CAMERA
用于访问相机或者截屏设备中的图片/视频
android.permission.CAMERA
请求访问相机设备
android.permission-group.CONTACTS
联系人相关的运行时权限
android.permission.READ_CONTACTS
允许应用读取联系人数据

android.permission.WRITE_CONTACTS
允许应用写入联系人数据

android.permission.GET_ACCOUNTS
允许访问Accounts Service中的帐户列表
android.permission-group.LOCATION
用于访问设备位置的权限
android.permission.ACCESS_FINE_LOCATION
允许应用访问设备的精确位置

android.permission.ACCESS_COARSE_LOCATION
允许应用访问设备的粗略位置
android.permission-group.MICROPHONE
用于访问设备的麦克风音频权限(注意:电话也可以捕获音频,但是在一个独立的权限组中)
android.permission.RECORD_AUDIO
允许应用录音
android.permission-group.PHONE
电话特征相关权限
android.permission.READ_PHONE_STATE
允许只读访问电话状态, 包括设备的电话号码、当前的蜂窝网络信息、任何正在进行的呼叫的状态以及在设备上注册的任何PhoneAccount的列表。

android.permission.CALL_PHONE
允许应用程序在不通过拨号界面的情况下启动电话呼叫, 并且能由用户确认呼叫。

android.permission.READ_CALL_LOG

允许应用程序读取用户的电话呼叫记录。


android.permission.WRITE_CALL_LOG

允许应用程序写入(但不可读取)的电话呼叫记录数据。 


com.android.voicemail.permission.ADD_VOICEMAIL

允许应用程序添加语音信箱到系统中。


android.permission.USE_SIP

允许应用使用SIP服务


android.permission.PROCESS_OUTGOING_CALLS

允许应用程序查看正在拨出通话的电话号码, 该选项可将呼叫重定向到其他号码或中止呼叫。

android.permission-group.SENSORS

访问与身体或环境传感器相关的权限

android.permission.BODY_SENSORS

允许应用程序从传感器访问数据,此传感器是用户测量其身体状态的, 如心率。

android.permission-group.SMS

短信相关的运行时权限

android.permission.SEND_SMS

允许应用程序发送SMS短消息


android.permission.RECEIVE_SMS

允许应用程序接受SMS短消息


android.permission.READ_SMS

允许应用程序读取SMS短消息


android.permission.RECEIVE_WAP_PUSH

允许应用程序接受WAP PUSH消息。


android.permission.RECEIVE_MMS

允许应用程序监视收到的彩信(MMS)。

android.permission-group.STORAGE

共享外部存储相关的运行时权限

android.permission.READ_EXTERNAL_STORAGE

允许应用程序读取外部存储设备。

应用程序声明了WRITE_EXTERNAL_STORAGE权限,则自动获得此权限。

从API level 19开始,如果需要此功能,必须设置此权限。在API level 19之前,此权限不是强制,任何应用程序都可以读取外部存储设备。你可以在android 4.1或更高版本的设备上,通过设置应用程序,选择“开发者选项”,启用保护USB存储来测试你的应用程序的权限。
同样,从API level 19开始,此权限不再需要通过getExternalFilesDir(String)和getExternalCacheDir()返回应用程序的特定目录,并在此目录中读写文件。

注意:如果你的minSdkVersion,并且targetSdkVersion设置为3或更低,则系统自动授予应用程序此权限。如果你不需要此权限,则确保你的targetSdkVersion设置为4或更高。


android.permission.WRITE_EXTERNAL_STORAGE

允许应用程序写入外部存储设备。

注意:如果你的minSdkVersion,并且targetSdkVersion设置为3或更低,则系统自动授予应用程序此权限。如果你不需要此权限,则取保你的targetSdkVersion设置为4或更高。
从API level 19开始,此权限不再需要通过getExternalFilesDir(String)和getExternalCacheDir()返回应用程序的特定目录,并在此目录中读写文件。

3.签名权限

权限定义:权限被声明为Signature级别,只有和该apk(定义了这个权限的apk)用相同的私钥签名的应用才可以申请该权限。

frameworks/base/core/res/AndroidManifest.xml声明的权限为Signature级别,那么只有与Android官方使用相同私钥签名的应用才可以申请该权限。 

权限介绍

android.permission.WRITE_SETTINGS
允许应用程序读写系统设置。

注意:如果应用程序运行在API level 23或更高版本的Android系统中,用户必须通过“权限管理”界面明确授予该应用程序的拥有此权限。应用程序通过发送带有action的ACTION_MANAGE_WRITE_SETTINGS的intent,来请求用户的批准。应用程序可以通过调用Settings.System.canWrite(),来检查它是否具有此授权。

android.permission.SYSTEM_ALERT_WINDOW
允许应用程序使用TYPE_APPLICATION_OVERLAY类型创建窗口,可以将窗口显示在所有其他应用程序的顶层。很少的应用程序需要用到此权限;此窗口用于用户与系统层交互。

4.签名或系统权限

权限被声明为SignatureOrSystem级别,有两种应用可以申请该权限。
1)和该apk(定义了这个权限的apk)用相同的私钥签名的应用
2)在/system/app目录下的应用

举例说明,比如百度地图apk的AndroidManifest.xml里面声明了一个权限,
1)权限定义为Dangerous,那么任何其他应用都可以使用。
2)权限定义为Signature,那么只有使用同样私钥签名的apk,例如百度网盘,可以使用这个权限。
3)权限定义为SignatureOrSystem,那么使用同样私钥签名的apk,例如百度网盘,可以使用这个权限。在/system/app下的应用也可以使用这个权限。

你可能感兴趣的:(android)