1,权限概要:
权限分为两种级别:【Normal(普通)级】 和 【Dangerous(危险)级】
其中,【普通级】则不需要程序进行用户权限申请,但是【危险级】则是不申请就没有。
所有权限应当在【Manifest.xml】中进行声明。
在【安卓6.0】以后新增了【运行时权限】,【安卓10.0】以后更新了【后台位置访问】,因此读者需根据自己开发的APP的安卓版本使用权限。
{ 其实理论上如果你开发【安卓5.0】及以下版本则不需要做申请权限功能(他要么接受所有权限,要么不能下载[手动滑稽] ),因此如果你在开发个Payload(网络安全领域),建议使用Android 6.0以下版本 }
2,权限格式:
在XML中,权限应当在平行于<application>元素的地方声明,
即<manifest> 这里 <application> ... </application> </manifest>
语法如下:
<uses-permission android:name="android.permission.权限名称"/>
3,权限相关Java函数:
1. 两个相关常变量:
- PackageManager.PERMISSION_GRANTED : 拥有权限的变量
- PackageManager.PERMISSION_DENIED:未拥有权限时的变量
2. 两个相关函数:
- checkSelfPermission:检查权限调用的函数
-
requestPermissions:请求权限时调用的函数
[1] checkSelfPermission语法:
源代码:
int checkSelfPermission(@NonNull Context context, @NonNull String permission)
context:上下文
permission:通常是:
String permission = Manifest.permission.权限名
[2] requestPermissions 语法:
源代码:
void requestPermissions(@NonNull Activity activity, @NonNull String[] permissions, int requestCode)
- Activity :当前活动实例
- permissions:所有权限组成的String[]数组
- requestCode:自定义的请求码(必须是整形 )
通常requestCode被这样声明:
private static final int 自定义变量名 = 2;
// 你乐意的话 1145141919810 都没问题 (好像这个要Long)
3. 通常开发用法:
放在MainActivity中:代码逻辑:如没有权限,则申请权限
代码如下:
if (ContextCompat.checkSelfPermission(this,Manifest.permission.权限名)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.权限名},自定义requestCode变量名);}
4,有哪些权限
Normal:
-
ACCESS_NETWORK_STATE
- 允许应用访问有关网络的信息,例如当前的网络连接是否有效。 -
VIBRATE
- 允许应用控制设备的振动器。 -
INTERNET
- 允许应用打开网络套接字。 -
ACCESS_WIFI_STATE
- 允许应用访问有关Wi-Fi网络的信息。 -
WAKE_LOCK
- 允许应用防止设备进入休眠状态或屏幕变暗。 -
CHANGE_WIFI_STATE
- 允许应用改变Wi-Fi连接状态。 -
FOREGROUND_SERVICE
- 允许应用使用前台服务。 -
READ_PHONE_STATE
- 允许应用访问设备的电话功能,例如读取手机号码、当前网络信息、是否正在通话等。不过,从Android 10开始,这个权限不再授予对电话号码、设备序列号和国际移动用户身份识别码(IMSI)的访问权限,这些信息现在需要READ_PHONE_NUMBERS
权限。
Dangerous:
-
CAMERA
- 允许应用访问设备的摄像头进行拍照或视频录制。 -
READ_CONTACTS
- 允许应用读取用户的联系人数据。 -
WRITE_CONTACTS
- 允许应用修改用户的联系人数据。 -
GET_ACCOUNTS
- 允许应用访问账户服务中的账户列表。 -
ACCESS_FINE_LOCATION
- 允许应用访问精确位置。 -
ACCESS_COARSE_LOCATION
- 允许应用访问大致位置。 -
RECORD_AUDIO
- 允许应用录制音频。 -
READ_PHONE_STATE
- 允许应用访问设备的电话功能,包括读取手机号码、当前网络信息、是否正在通话等。 -
CALL_PHONE
- 允许应用发起电话呼叫,无需通过拨号器用户界面。 -
READ_CALL_LOG
- 允许应用读取用户的通话记录。 -
WRITE_CALL_LOG
- 允许应用写入(但不读取)用户的通话记录。 -
ADD_VOICEMAIL
- 允许应用添加系统中的语音邮件。 -
USE_SIP
- 允许应用使用SIP视频服务。 -
SEND_SMS
- 允许应用发送短信。 -
RECEIVE_SMS
- 允许应用接收短信。 -
READ_SMS
- 允许应用读取短信内容。 -
WRITE_EXTERNAL_STORAGE
- 允许应用写入外部存储。 -
READ_EXTERNAL_STORAGE
- 允许应用读取外部存储。