Unity与Android Studio交互之 ✨ 获取手机权限(存储、录音、相机等)

简介: Unity通过Android Studio 获取手机权限(存储、录音、相机等)文章目录Unity通过Android Studio 获取手机权限(存储、录音、相机等)常用权限一、动态获取权限流程二、使用步骤1.检测当前是否已获取权限2.检测当前安卓版本3.申请动态获取权限总结

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

文章目录

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

常用权限

一、动态获取权限流程

二、使用步骤

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

2.检测当前安卓版本

3.申请动态获取权限

总结

常用权限

<!--连接网络权限,用于执行云端语音能力 -->
<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开始对一些危险的权限进行了动态获取权限

下图是动态获取权限的额流程图


image.png


二、使用步骤

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


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


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

        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        //在需要使用的地方调用此方法即可获取权限
        jo.Call("permissionDemo");
相关文章
|
开发工具 Android开发 iOS开发
如何在Android Studio中配置Flutter环境?
如何在Android Studio中配置Flutter环境?
3094 160
|
10月前
|
传感器 机器学习/深度学习 算法
【室内导航通过视觉惯性数据融合】将用户携带的智能手机收集的惯性数据与手机相机获取的视觉信息进行融合研究(Matlab代码实现)
【室内导航通过视觉惯性数据融合】将用户携带的智能手机收集的惯性数据与手机相机获取的视觉信息进行融合研究(Matlab代码实现)
310 2
|
Android开发 Windows
Android studio 报错Connect to 127.0.0.1:8888 [/127.0.0.1] failed: Connection refused: connect(已解决)
这是一篇关于解决Android Studio报错“Connect to 127.0.0.1:8888 failed: Connection refused”的文章。问题通常因系统代理设置被Android Studio自动保存导致。解决方法是找到系统中Android Studio使用的gradle.properties文件(位于Windows的C:\Users\你的电脑用户名\.gradle或Mac的/Users/.{你的用户目录}/.gradle),删除或注释掉多余的代理配置后保存并重新Sync项目。希望此经验能帮助快速解决同类问题!
2631 36
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
1086 19
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
648 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
551 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Android开发
【错误记录】Android Studio 编译报错 ( Installed Build Tools revision 31.0.0 is corrupted )
【错误记录】Android Studio 编译报错 ( Installed Build Tools revision 31.0.0 is corrupted )
1566 0
【错误记录】Android Studio 编译报错 ( Installed Build Tools revision 31.0.0 is corrupted )
|
数据可视化 开发工具 Android开发
【错误记录】Android Studio 向 GitHub 提交代码报错 ( Push failed: Failed with error: Could not read | 使用命令行提交代码 )
【错误记录】Android Studio 向 GitHub 提交代码报错 ( Push failed: Failed with error: Could not read | 使用命令行提交代码 )
557 0
【错误记录】Android Studio 向 GitHub 提交代码报错 ( Push failed: Failed with error: Could not read | 使用命令行提交代码 )
|
Android开发
【错误记录】Android Studio 编译报错 ( Error:Connection timed out: connect | 更新配置依赖仓库方式 )
【错误记录】Android Studio 编译报错 ( Error:Connection timed out: connect | 更新配置依赖仓库方式 )
1349 0
【错误记录】Android Studio 编译报错 ( Error:Connection timed out: connect | 更新配置依赖仓库方式 )
|
XML 缓存 IDE
解决Android Studio报错:Compilation is not supported for following modules
本文主要解决和"Compilation is not supported for following modules"有关的报错。
2642 0
解决Android Studio报错:Compilation is not supported for following modules