PermissionNote:AS开发App权限设置

PermissionNote:AS开发App权限设置


1、权限申请

  • 在AndroidManifest文件进行权限申请即可:

具体介绍一下权限
常用的权限名称
拍照权限: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>

2、危险权限动态授权

  • 在Google的官方文档的权限列表里面看到,其中,危险级别的是需要用户经过选择允许才可以开启的,也就是说,需要开发者在程序代码中逻辑实现给用户选择,不然,用户不知道是否需要开启所需要的权限;
  • 针对API 23(安卓6.0)以上的设备,我们需要动态授权,下面介绍动态授权的方法:
//第一药:以读写权限为例
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两个常量,前者代表用户同意程序获取系统权限,后者代表用户拒绝程序获取系统权限*/
}
  • 写好逻辑后,系统会自动弹出一个dialog的对话框,与用户进行交互,去提示用户是否允许权限;
  • 注意:
    此时的Manifest的导入包路径import android.Manifest

3、权限全览

在这里插入图片描述


总结:

权限需谨慎,不慎祸千年,笔录在此!!!

为了曾经那个轻易许下的梦
发布了17 篇原创文章 · 获赞 4 · 访问量 2521

猜你喜欢

转载自blog.csdn.net/yu1581274988/article/details/96642569