Unity通过Android Studio 获取手机权限(存储、录音、相机等)
文章目录
- Unity通过Android Studio 获取手机权限(存储、录音、相机等)
- 常用权限
- 一、动态获取权限流程
- 二、使用步骤
- 1.检测当前是否已获取权限
- 2.检测当前安卓版本
- 3.申请动态获取权限
- 总结
常用权限
代码语言:javascript复制<!--连接网络权限,用于执行云端语音能力 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--获取当前wifi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--允许程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<!--读取手机信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--读取联系人权限,上传联系人需要用到此权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!--外存储写权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--外存储读权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--配置权限,用来记录应用配置信息 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
<!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务-->
<!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 -->
<uses-permission android:name="android.permission.CAMERA" />
一、动态获取权限流程
Android系统从6.0开始对一些危险的权限进行了动态获取权限 下图是动态获取权限的额流程图
二、使用步骤
在使用获取权限的时候大致可以分为两种情况,一种是打开应用的时候就直接获取应用所需的权限,这时候就把所有权限直接在初始化的时候就获取到。另一种是在使用某种功能时,才获取权限。比如应用内使用相机、录音机等。
接下来使用第二种方法获得权限
1.检测当前是否已获取权限
代码如下(示例):
代码语言:javascript复制int permissioncamera;
int permissionaudio;
// 判断targetSdkVersion 是否大于等于23,这个都是自己写的,一般也不用判断,直接根据自己的版本选择方法就行
if (MainActivity.this.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.M) {
//安卓6.0 以上使用
permissioncamera = MainActivity.this.checkSelfPermission(android.Manifest.permission.CAMERA);
permissionaudio = MainActivity.this.checkSelfPermission(android.Manifest.permission.RECORD_AUDIO);
} else {
//安卓6.0 以下使用
permissioncamera=PermissionChecker.checkSelfPermission(MainActivity.this,android.Manifest.permission.CAMERA);
permissionaudio=PermissionChecker.checkSelfPermission(MainActivity.this,android.Manifest.permission.RECORD_AUDIO);
}
//检查是否已经获取了相机权限:
if(permissioncamera!= PackageManager.PERMISSION_GRANTED)
//检查是否已经获取了录音权限:
if(permissionaudio!= PackageManager.PERMISSION_GRANTED)
2.检测当前安卓版本
由于安卓6.0前后的获取方法不同,所以在使用的时候先判断一下版本
代码如下(示例):
代码语言:javascript复制if (MainActivity.this.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.M)
3.申请动态获取权限
代码语言:javascript复制 MainPort.this.requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 0x01);
//在此String中添加各种权限一款获取
@Override
//这是弹窗选择后的回调
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
//允许权限
case 0x01: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
//拒绝权限
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
//拒绝并不在询问
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainPort.this,"您拒绝了录音权限,请手动去应用->设置,修改权限",Toast.LENGTH_LONG).show();
}
});
return;
}
}
}
总结
AS端:
代码语言:javascript复制 public void permissionDemo(){
//使用录音前首先需要获取权限
int permissionCheck= MainPort.this.checkSelfPermission(android.Manifest.permission.RECORD_AUDIO);
//int permissionCheck = ContextCompat.checkSelfPermission(MainPort.this, Manifest.permission.RECORD_AUDIO);
//如果有权限则返回PackageManager.PERMISSION_GRANTED,否则返回PackageManager.PERMISSION_DENIED。
if(permissionCheck!= PackageManager.PERMISSION_GRANTED) {//为获取权限时
//请求获取权限
MainPort.this.requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 0x01);
//用new String[]的原因是可以在String[]中存储多个需要的权限,一次过请求
//将回调onRequestPermissionsResult()方法
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case 0x01: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainPort.this,"您拒绝了录音权限,请手动去应用->设置,修改权限",Toast.LENGTH_LONG).show();
}
});
return;
}
}
}
Unity端:
代码语言:javascript复制 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
//在需要使用的地方调用此方法即可获取权限
jo.Call("permissionDemo");