Unity通过Android Studio 获取手机权限(存储、录音、相机等)

Unity通过Android Studio 获取手机权限(存储、录音、相机等)


一、动态获取权限流程

Android系统从6.0开始对一些危险的权限进行了动态获取权限
下图是动态获取权限的额流程图

在这里插入图片描述

二、使用步骤

在使用获取权限的时候大致可以分为两种情况,一种是打开应用的时候就直接获取应用所需的权限,这时候就把所有权限直接在初始化的时候就获取到。另一种是在使用某种功能时,才获取权限。比如应用内使用相机、录音机等。

接下来使用第二种方法获得权限

1.检测当前是否已获取权限

代码如下(示例):


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前后的获取方法不同,所以在使用的时候先判断一下版本

代码如下(示例):

if (MainActivity.this.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.M) 

3.申请动态获取权限

     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端:

 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端:

扫描二维码关注公众号,回复: 12665804 查看本文章
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        //在需要使用的地方调用此方法即可获取权限
        jo.Call("permissionDemo");

猜你喜欢

转载自blog.csdn.net/zhangay1998/article/details/114363963