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.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存储来测试你的应用程序的权限。 注意:如果你的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下的应用也可以使用这个权限。