具体介绍一下权限
常用的权限名称:
拍照权限:android.permission.CAMERA
读取电话状态权限:android.permission.READ_PHONE_STATE
访问网络权限:android.permission.INTERNET
写入数据权限:android.permission.WRITE_EXTERNAL_STORAGE
读取数据权限:android.permission.READ_EXTERNAL_STORAGE
震动权限:android.permission.VIBRATE
录音权限:android.permission.RECORD_AUDIO
获取网络状态权限:ACCESS_NETWORK_STATE
闪光灯权限:android.permission.FLASHLIGHT
前置摄像头权限:android.hardware.camera.front
高危权限:
ACCESS_COARSE_LOCATION:允许APP访问大概地理位置。
ACCESS_FINE_LOCATION:允许APP访问精确地理位置。
ADD_VOICEMAIL:允许APP添加语音信箱在程序里面。
BODY_SENSORS:允许应用程序访问用户用来衡量身体内发生的情况的传感器的数据,例如心率。
CALL_PHONE:允许应用程序发起电话而不通过拨号器用户界面供用户确认通话。
CAMERA:请求能够访问摄像头设备。
GET_ACCOUNTS:允许访问帐户服务中的帐户列表。
PROCESS_OUTGOING_CALLS:允许应用程序在呼出期间查看正在拨打的电话号码,并选择将呼叫重定向到其他号码或完全中止呼叫。
READ_CALENDAR:允许应用程序读取用户的日历数据。
READ_CALL_LOG:允许程序读取用户的呼叫日志。
READ_CONTACTS:允许程序能够读取用户的联系人的数据。
READ_EXTERNAL_STORAGE:允许程序读取扩展存储。
READ_LOGS:允许程序读取受保护的日志文件。
READ_PHONE_STATE:允许只读访问电话状态,包括设备的电话号码,当前的蜂窝网络信息,任何正在进行的呼叫的状态以及在设备上注册的任何PhoneAccounts的列表。
READ_SMS:允许程序读取手机短信。
RECEIVE_MMS:允许程序去监听手机接收到的MMS信息
RECEIVE_SMS:允许程序去接收信息。
RECEIVE_WAP_PUSH:允许应用程序接收WAP推送消息。
RECORD_AUDIO:允许应用程序录制音频。
SEND_SMS:允许应用程序发送短信。
USE_SIP:允许应用程序使用SIP服务。
WRITE_CALENDAR:允许应用程序写入用户的日历数据。
WRITE_CALL_LOG:允许应用程序写入(但不读取)用户的通话记录数据。
WRITE_CONTACTS:允许应用程序写入用户的联系人数据。
WRITE_EXTERNAL_STORAGE:允许程序去写入扩展的存储。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="syvideo.sylanty.face" >
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
//第一药:以读写权限为例
if (ContextCompat.checkSelfPermission(Main.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(Main.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else if (ContextCompat.checkSelfPermission(Main.this,Manifest.permission.READ_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(Main.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
//第二药:以地理位置权限为例
if(ContextCompat.checkSelfPermission(mContext,Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
//执行完requestPermissions方法后,Activity会自动回调一个onRequestPermissionsResult方法:
//onRequestPermissionsResult()是requestPermissions()方法执行后的回调方法
/*
* requestCode:相当于一个标志,
* permissions:需要传进的permission,不能为空
* grantResults:用户进行操作之后,或同意或拒绝回调的传进的两个参数;
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//这里实现用户操作,或同意或拒绝的逻辑
/*grantResults会传进android.content.pm.PackageManager.PERMISSION_GRANTED 或 android.content.pm.PackageManager.PERMISSION_DENIED两个常量,前者代表用户同意程序获取系统权限,后者代表用户拒绝程序获取系统权限*/
}
- 注意:
此时的Manifest的导入包路径import android.Manifest
权限需谨慎,不慎祸千年,笔录在此!!!