不知道Android开发中有哪些权限?看这里

Android 权限详解

    • 嘚吧嘚
    • 危险权限及其分组
    • 所有权限及说明
    • 危险权限授权示例
    • 普通权限授权示例

嘚吧嘚

在使用内容提供器的时候很多情况下会使用到很多危险权限,如通讯录、摄像机、拨打电话、发送短信… …等权限。

普通权限AndroidManifest.xml中配置一下声明权限就可以了使用了,如

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test">
	
	<!-- 振动权限 -->
    <uses-permission android:name="android.permission.VIBRATE" /> 
	
	......
	
</manifest>

危险权限不仅需要在AndroidManifest.xml中配置声明权限,还需要用户授权才能使用。

危险权限及其分组

注意:危险权限同一组内有一项权限被授权,则一组权限都被授权。

编号 权限组 权限
1 CONTACTS (联系人) android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.GET_ACCOUNTS
2 PHONE (手机) android.permission.READ_CALL_LOG
android.permission.READ_PHONE_STATE
android.permission.CALL_PHONE
android.permission.WRITE_CALL_LOG
android.permission.USE_SIP
android.permission.PROCESS_OUTGOING_CALLS
com.android.voicemail.permission.ADD_VOICEMAIL
3 CALENDAR (日历) android.permission.READ_CALENDAR
android.permission.WRITE_CALENDAR
4 CAMERA (相机) android.permission.CAMERA
5 SENSORS (传感器) android.permission.BODY_SENSORS
6 LOCATION (位置) android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
7 STORAGE (存储卡) android.permission.READ_EXTERNAL_STORAGE
android.permission.WRITE_EXTERNAL_STORAGE
8 MICROPHONE (麦克风) android.permission.RECORD_AUDIO
9 SMS (短信) android.permission.READ_SMS
android.permission.RECEIVE_WAP_PUSH
android.permission.RECEIVE_MMS
android.permission.RECEIVE_SMS
android.permission.SEND_SMS
aandroid.permission.READ_CELL_BROADCASTS

所有权限及说明

编号 权限 说明
1 ACCESS_CHECKIN_PROPERTIES 允许读写访问”properties”表在checkin数据库中,改值可以修改上传
2 ACCESS_COARSE_LOCATION 允许一个程序访问CellID或 WiFi热点来获取粗略的位置
3 ACCESS_FINE_LOCATION 允许一个程序访问CellID或 WiFi热点来获取粗略的位置
4 ACCESS_LOCATION_EXTRA_COMMANDS 允许应用程序访问额外的位置提供命令
5 ACCESS_NETWORK_STATE 允许程序获取网络信息状态,如当前的网络连接是否有效
6 ACCESS_NOTIFICATION_POLICY 希望访问通知策略的应用程序的标记许可
7 ACCESS_WIFI_STATE 允许程序获取当前WiFi接入的状态以及WLAN热点的信息
8 ACCOUNT_MANAGER 允许程序通过账户验证方式访问账户管理ACCOUNT_MANAGER相关信息
9 ADD_VOICEMAIL 允许一个应用程序添加语音邮件系统
10 BATTERY_STATS 允许程序更新手机电池统计信息
11 BIND_ACCESSIBILITY_SERVICE 请求accessibilityservice服务,以确保只有系统可以绑定到它
12 BIND_APPWIDGET 允许程序告诉appWidget服务需要访问小插件的数据库,只有非常少的应用才用到此权限
13 BIND_CARRIER_MESSAGING_SERVICE API等级高于23时使用,否则使用BIND_CARRIER_SERVICES
14 BIND_CARRIER_SERVICES 允许绑定到运营商应用程序中的服务的系统进程将有这个权限
15 BIND_CHOOSER_TARGET_SERVICE 必须由ChooserTargetService要求,确保只有系统可以绑定到它
16 BIND_DEVICE_ADMIN 请求系统管理员接收者receiver,只有系统才能使用
17 BIND_DREAM_SERVICE 必须由一个DreamService要求,确保只有系统可以绑定到它
18 BIND_INCALL_SERVICE 必须由一个MidiDeviceService要求,确保只有系统可以绑定到它
19 BIND_INPUT_METHOD 请求InputMethodService服务,只有系统才能使用
20 BIND_MIDI_DEVICE_SERVICE 必须由一MidiDeviceService要求,确保只有系统可以绑定到它
21 BIND_NFC_SERVICE 由HostApduServiceOffHostApduService必须确保只有系统可以绑定到它
22 BIND_NOTIFICATION_LISTENER_SERVICE 必须要求由notificationlistenerservice,以确保只有系统可以绑定到它
23 BIND_PRINT_SERVICE 必须要求由printservice,以确保只有系统可以绑定到它
24 BIND_REMOTEVIEWS 必须通过RemoteViewsService服务来请求,只有系统才能用
25 BIND_TELECOM_CONNECTION_SERVICE 必须由ConnectionService要求,确保只有系统可以绑定到它
26 BIND_TEXT_SERVICE 必须要求textservice,以确保只有系统可以绑定到它
27 BIND_TV_INPUT 必须由TvInputService需要确保只有系统可以绑定到它
28 BIND_VOICE_INTERACTION 必须VoiceInteractionService要求,确保只有系统可以绑定到它
29 BIND_VPN_SERVICE 绑定VPN服务必须通过VpnService服务来请求,只有系统才能用
30 BIND_WALLPAPER 必须通过WallpaperService服务来请求,只有系统才能用
31 BLUETOOTH 允许程序连接配对过的蓝牙设备
32 BLUETOOTH_ADMIN 允许程序进行发现和配对新的蓝牙设备
33 BLUETOOTH_PRIVILEGED 允许应用程序配对蓝牙设备,而无需用户交互。这不是第三方应用程序可用
34 BODY_SENSORS 允许应用程序访问用户使用的传感器来测量他/她的身体内发生了什么,如心率仪
35 BROADCAST_PACKAGE_REMOVED 允许程序广播一个提示消息在一个应用程序包已经移除后
36 BROADCAST_SMS 允许程序当收到短信时触发一个广播
37 BROADCAST_STICKY 允许程序收到广播后快速收到下一个广播
38 BROADCAST_WAP_PUSH WAP PUSH服务收到后触发一个广播
39 CALL_PHONE 允许程序从非系统拨号器里拨打电话
40 CALL_PRIVILEGED 允许程序拨打电话,替换系统的拨号器界面
41 CAMERA 允许程序访问摄像头进行拍照
42 CAPTURE_AUDIO_OUTPUT 允许一个应用程序捕获音频输出。不被第三方应用使用
43 CAPTURE_SECURE_VIDEO_OUTPUT 允许一个应用程序捕获视频输出。不被第三方应用使用
44 CAPTURE_VIDEO_OUTPUT 允许一个应用程序捕获视频输出,不被第三方应用使用
45 CHANGE_COMPONENT_ENABLED_STATE 改变组件是否启用状态
46 CHANGE_CONFIGURATION 允许当前应用改变配置,如定位
47 CHANGE_NETWORK_STATE 允许程序改变网络状态,如是否联网
48 CHANGE_WIFI_MULTICAST_STATE 允许程序改变WiFi多播状态
49 CHANGE_WIFI_STATE 允许程序改变WiFi状态
50 CLEAR_APP_CACHE 允许程序清除应用缓存
51 CONTROL_LOCATION_UPDATES 允许程序获得移动网络定位信息改变
52 DELETE_CACHE_FILES 允许程序删除缓存文件
53 DELETE_PACKAGES 允许程序删除应用
54 DIAGNOSTIC 允许程序到RW到诊断资源
55 DISABLE_KEYGUARD 允许程序禁用键盘锁
56 DUMP 允许程序获取系统dump信息从系统服务
57 EXPAND_STATUS_BAR 允许程序扩展或收缩状态栏
58 FACTORY_TEST 允许程序运行工厂测试模式
59 FLASHLIGHT 允许访问闪光灯
60 GET_ACCOUNTS 允许程序访问账户Gmail列表
61 GET_ACCOUNTS_PRIVILEGED 允许访问帐户服务中的帐户列表
62 GET_PACKAGE_SIZE 允许一个程序获取任何package占用空间容量
63 GET_TASKS 允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等
64 GLOBAL_SEARCH 允许程序允许全局搜索
65 INSTALL_LOCATION_PROVIDER 允许程序安装定位提供
66 INSTALL_PACKAGES 允许程序安装应用
67 INSTALL_SHORTCUT 创建快捷方式
68 INTERNET 允许程序访问网络连接,可能产生GPRS流量
69 KILL_BACKGROUND_PROCESSES 允许程序调用killBackgroundProcesses(String).方法结束后台进程
70 LOCATION_HARDWARE 允许一个应用程序中使用定位功能的硬件,不使用第三方应用
71 MANAGE_DOCUMENTS 允许一个应用程序来管理文档的访问,通常是一个文档选择器部分
72 MASTER_CLEAR 允许程序执行软格式化,删除系统配置信息
73 MEDIA_CONTENT_CONTROL 允许一个应用程序知道什么是播放和控制其内容。不被第三方应用使用
74 MODIFY_AUDIO_SETTINGS 允许程序修改声音设置信息
75 MODIFY_PHONE_STATE 允许程序修改电话状态,如飞行模式,但不包含替换系统拨号器界面
76 MOUNT_FORMAT_FILESYSTEMS 允许程序格式化可移动文件系统,比如格式化清空SD卡
77 MOUNT_UNMOUNT_FILESYSTEMS 允许程序挂载、反挂载外部文件系统
78 NFC 允许程序执行NFC近距离通讯操作,用于移动支持
79 PACKAGE_USAGE_STATS 允许一个程序设置他的activities显示
80 PERSISTENT_ACTIVITY 允许程序创建一个永久的Activity,该功能标记为将来将被移除
81 PROCESS_OUTGOING_CALLS 允许程序监视,修改或放弃播出电话
82 READ_CALENDAR 允许程序读取用户的日程信息
83 READ_CALL_LOG 读取通话记录
84 READ_CONTACTS 允许程序访问联系人通讯录信息
85 READ_EXTERNAL_STORAGE 程序可以读取设备外部存储空间(内置SDcard和外置SDCard)的文件,如果您的App已经添加了”WRITE_EXTERNAL_STORAGE”权限,则就没必要添加读的权限了,写权限已经包含了读权限了
86 READ_FRAME_BUFFER 允许程序读取帧缓存用于屏幕截图
87 READ_INPUT_STATE 允许程序读取当前键的输入状态,仅用于系统
88 READ_LOGS 允许程序读取系统底层日志
89 READ_PHONE_STATE 允许程序访问电话状态
90 READ_SMS 允许程序读取短信内容
91 READ_SYNC_SETTINGS 允许程序读取同步设置,读取Google在线同步设置
92 READ_SYNC_STATS 允许程序读取同步状态,获得Google在线同步状态
93 READ_VOICEMAIL 允许应用程序在系统读取语音邮件
94 REBOOT 允许程序重新启动设备
95 RECEIVE_BOOT_COMPLETED 允许程序开机自动运行
96 RECEIVE_MMS 允许程序接收彩信
97 RECEIVE_SMS 允许程序接收短信
98 RECEIVE_WAP_PUSH 允许程序接收WAP PUSH信息
99 RECORD_AUDIO 允许程序录制声音通过手机或耳机的麦克
100 REORDER_TASKS 允许程序重新排序系统Z轴运行中的任务
101 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 权限的应用程序必须要使用ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS这是一个正常的权限:一个应用程序请求它将永远被授予权限,而不需要用户批准或看到它。
102 REQUEST_INSTALL_PACKAGES 允许应用程序请求安装包。针对API大于22必须持有该许可使用ACTION_INSTALL_PACKAGE应用。
103 RESTART_PACKAGES 允许程序结束任务通过restartPackage(String)方法,该方式将在外来放弃
104 SEND_RESPOND_VIA_MESSAGE 允许用户在来电的时候用你的应用进行即时的短信息回复
105 SEND_SMS 允许程序发送短信
106 SET_ALARM 允许程序设置闹铃提醒
107 SET_ALWAYS_FINISH 允许程序设置程序在后台是否总是退出
108 SET_ANIMATION_SCALE 允许程序设置全局动画缩放
109 SET_DEBUG_APP 允许程序设置调试程序,一般用于开发
110 SET_PREFERRED_APPLICATIONS 允许程序设置应用的参数,已不再工作具体查看addPackageToPreferred(String) 介绍
111 SET_PROCESS_LIMIT 允许程序设置最大的进程数量的限制
112 SET_TIME 允许程序设置系统时间
113 SET_TIME_ZONE 允许程序设置系统时区
114 SET_WALLPAPER 允许程序设置桌面壁纸
115 SET_WALLPAPER_HINTS 允许程序设置壁纸建议
116 SIGNAL_PERSISTENT_PROCESSES 允许程序发送一个永久的进程信号
117 STATUS_BAR 允许程序打开、关闭、禁用状态栏
118 SYSTEM_ALERT_WINDOW 允许程序显示系统窗口
119 TRANSMIT_IR 允许使用设备的红外发射器,如果可用
120 UNINSTALL_SHORTCUT 删除快捷方式
121 UPDATE_DEVICE_STATS 允许程序更新设备状态
122 USE_FINGERPRINT 允许应用程序使用指纹硬件
123 USE_SIP 允许程序使用SIP视频服务
124 VIBRATE 允许程序振动
125 WAKE_LOCK 允许程序在手机屏幕关闭后后台进程仍然运行
126 WRITE_APN_SETTINGS 允许程序写入网络GPRS接入点设置
127 WRITE_CALENDAR 允许程序写入日程,但不可读取
128 WRITE_CALL_LOG 允许程序写入(但是不能读)用户的联系人数据
129 WRITE_CONTACTS 写入联系人,但不可读取
130 WRITE_EXTERNAL_STORAGE 允许程序写入外部存储,如SD卡上写文件
131 WRITE_GSERVICES 允许程序修改Google服务地图
132 WRITE_SECURE_SETTINGS 允许应用程序读取或写入安全系统设置
133 WRITE_SETTINGS 允许程序读取或写入系统设置
134 WRITE_SYNC_SETTINGS 允许程序写入同步设置
135 WRITE_VOICEMAIL 允许应用程序修改和删除系统中的现有的语音邮件,只有系统才能使用

危险权限授权示例

AndroidManifest.xml文件中声明“拨打电话”的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test">
	
    <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- 打电话 -->
	
	......
	
</manifest>

设置一个打电话的按钮,点击之后

call.setOnClickListener((v) -> {
    /*传入两个参数,第一个是context,第二个是要获得的权限名。将返回值与PackageManager.PERMISSION_GRANTED做比较*/
    if (ContextCompat.checkSelfPermission(ContactItemActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        /*为获得授权,调用requestPermissions方法向用户申请授权,传入三个参数:context,获得的权限名字符串,以及请求码,唯一值即可。*/
        ActivityCompat.requestPermissions(ContactItemActivity.this,new String[]{Manifest.permission.CALL_PHONE}, 1);
    } else {
        //number是要拨打的电话
        call(number);
    }
});

call方法的具体实现

private void call(String number) {
    try {
        System.out.println(number + "---------------------------");
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:" + number));
        startActivity(intent);
    } catch (SecurityException e) {
        e.printStackTrace();
    }
}

调用完requestPermissions方法后,无论用户选择授权与否,都会回调到onRequestPermissionsResult()方法中,授权结果封装在grantResults参数中,所以判断授权结果,只有用户授权同意,才会调用call方法。

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    call(number);
                } else {
                    Toast.makeText(this, "被拒绝了,没爱了", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }

普通权限授权示例

AndroidManifest.xml文件中声明“振动”权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test">
	
	<!-- 振动权限 -->
    <uses-permission android:name="android.permission.VIBRATE" /> 
	
	......
	
</manifest>

然后直接调用方法使用就行,不需要用户授权

Button vibrate = findViewById(R.id.vibrate);
vibrate.setOnClickListener((v) -> {
    Vibrator vs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    vs.vibrate(1000);
});

你可能感兴趣的:(Android)