Unity发布ios和Android获取相机权限的相关问题

Unity发布ios和Android获取相机权限的相关问题

  • 前言
  • 一、问题描述
  • 二、解决方法
    • 1.关闭与权限相关的功能
    • 2.每次挂起恢复进程时做权限判断
  • 三、具体实施
    • 1.ios获取用户是否给到了相机的权限
    • 2.Android获取用户是否给到了相机的权限
  • 总结
  • 版权声明

前言

最近用Unity做App的开发,发布Android和ios的时候遇到了相机权限的问题


一、问题描述

因为app需要用到设备的相机,所以要获取设备的相机权限,之前的app的做法都是如果用户没有给相机权限,就退出app,直接不能玩,但是最近这种做法app提审无法通过,因为国家相关部门发布相关要求,app不能因为用户拒绝权限而不能进入app。

二、解决方法

1.关闭与权限相关的功能

如果用户没有给到权限,相机识别时,将相机背景变为黑色,并且出ui弹窗提示,但弹窗可以关闭,不相关的其他功能仍然可以正常使用。

2.每次挂起恢复进程时做权限判断

在进入app时,每次恢复挂起的app进程时,每次调用相应的权限时,都会去主动请求app是否已经有相关权限了。

三、具体实施

ios和Android获取相机权限的状体不一样,所以分开去写

1.ios获取用户是否给到了相机的权限

先写oc的代码,将下面的这两个“.h”和“.mm”的文件,放到unity 的Plugins文件夹下的ios文件夹下
JCamera.h

#import<Foundation/Foundation.h>
@interface JCamera:NSObject
@end

JCamera.mm

#import "JCamera.h"
#import <AVFoundation/AVFoundation.h>
#import <AVFoundation/AVCaptureDevice.h>
@implementation JCameraextern "C" int GetAVCapturePermission()
{NSString* mediaType = AVMediaTypeVideo;NSInteger status = AVAuthorizationStatusAuthorized;status = [AVCaptureDevice authorizationStatusForMediaType: mediaType];if (status == AVAuthorizationStatusNotDetermined){status=0;return 0;}else if (status == AVAuthorizationStatusAuthorized){status=1;return 1;}else if(status==AVAuthorizationStatusDenied){status=2;return 2;}else{status=0;return 0;}//UnitySendMessage("PublicGameObject","GetAVCapturePermission",status)
}@end

然后我们就可以在脚本里进行调用了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.InteropServices;
using UnityEngine.Android;public class IOSCameraAuthority : MonoSingleton<IOSCameraAuthority>
{public static IOSCameraAuthority ins;/// <summary>/// 没有相机权限的提示/// </summary>public GameObject warningPanel;public enum CameraStatus{UnAuthority = 0,Authority = 1,Denied = 2,None = 3,}[DllImport("__Internal")]public static extern int GetAVCapturePermission();void Awake(){warningPanel.SetActive(false);ins = this;}private void Start(){#if UNITY_IOSif (GetCameraAuthorityStatus()==CameraStatus.Denied){warningPanel.SetActive(true);
UserData.Instance.ifCameraPermissions = false;}else{warningPanel.SetActive(false);
UserData.Instance.ifCameraPermissions = true;}
#endif
#if UNITY_ANDROIDif (!Permission.HasUserAuthorizedPermission(Permission.Camera)){warningPanel.SetActive(true);UserData.Instance.ifCameraPermissions = false;}else{warningPanel.SetActive(false);UserData.Instance.ifCameraPermissions = true;}
#endif}public CameraStatus GetCameraAuthorityStatus(){int status = GetAVCapturePermission();switch (status){case 0:return CameraStatus.UnAuthority;case 1:return CameraStatus.Authority;case 2:return CameraStatus.Denied;default:return CameraStatus.None;}}
}

2.Android获取用户是否给到了相机的权限

安卓就比较简单了,也已经写在上面的脚本里面了,就是下面贴的这一段

#if UNITY_ANDROIDif (!Permission.HasUserAuthorizedPermission(Permission.Camera)){warningPanel.SetActive(true);UserData.Instance.ifCameraPermissions = false;}else{warningPanel.SetActive(false);UserData.Instance.ifCameraPermissions = true;}
#endif

总结

就先讲到这里吧,好记性不如烂笔头,如果有问题可以随时联系我。
欢迎大佬多多来给萌新指正,欢迎大家来共同探讨。
如果各位看官觉得文章有点点帮助,跪求各位给点个“一键三连”,谢啦~

声明一下:本博文章若非特殊注明皆为原创原文链接
https://blog.csdn.net/Wrinkle2017/article/details/117224541
————————————————————————————————

版权声明

版权声明:本博客为非营利性个人原创
所刊登的所有作品的著作权均为本人所拥有
本人保留所有法定权利,违者必究!
对于需要复制、转载、链接和传播博客文章或内容的
请及时和本博主进行联系
对于经本博主明确授权和许可使用文章及内容的
使用时请注明文章或内容出处并注明网址
转载请附上原文出处链接及本声明

Unity发布ios和Android获取相机权限的相关问题相关推荐

  1. Android手机获取相机权限终极大招(兼容国产手机小米华为魅族以及6.0以下系统)

    对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录.短 ...

  2. Unity 发布IOS平台并部署到真机上测试的方法

    准备 Mac OS系统 使用Unity做IOS开发,需要一台苹果系统的电脑,如果没有,那就用虚拟机或者安装黑苹果吧,虽然Windows版Unity也可以跨平台发布IOS,但是问题多的让你怀疑人生. 虚 ...

  3. Android获取Root权限

    对于新近入手Android系统手机的机友来说,一定会接触到一个新词"ROOT",他的出现频率很高,在各个论坛上,网友的字里行间经常会出现,那么获取Root权限呢? [b]工具/原料 ...

  4. 【Ios】 Unity for iOS 打开相册、相机及保存图片到相册

    偶然在网上看到一位博主写的 unity 和ios 交互 个人感觉 功能很全 转载地址:http://blog.csdn.net/AnYuanLzh/article/details/50748928 在 ...

  5. Linux之获取管理员权限的相关命令

    Linux之获取管理员权限的相关命令 1. sudo命令的使用 命令 说明 sudo -s 切换到root用户,获取管理员权限 sudo 某个命令的执行需要获取管理员权限可以在执行命令前面加上sudo ...

  6. android危险权限分组,Android 6.0权限请求相关及权限分组方法

    Android M(6.0)API 23后加入了权限请求设置,APP需要使用某些权限需要主动申请. 权限分为3类,一组是Normal权限,无需申请,另一组是Dangerous,需申请,然后是特殊权限, ...

  7. Unity跨iOS、Android平台使用protobuf-net的方法

    --------------------------------------> dll预编译的方式使用protobuf http://www.ceeger.com/forum/read.php? ...

  8. HBuilderx打包h5的APP,解决获取相机权限问题

    最近有一个H5项目需要打包成APP,通过HBuilderx中的原生云打包(具体过程百度一下很详细),项目中需要获取相机的权限,程序中是通过 navigator.myGetUserMedia调取相机的, ...

  9. 三星android获取root权限,三星i9000 Android 2.3.3获取root权限教程

    类型:手机工具大小:64KB语言:中文 评分:5.0 标签: 立即下载 西西小编的手机是 三星i9000 Android 版本是 2.3.3 基带版本为 I9000ZSJV6 需要获取Root权限 有 ...

  10. Unity与IOS交互,调用相机相册,兼容ipad

    IOS篇 在处理unity和ios的时候,除了对oc不太习惯以外,还有就是iphone和ipad有些方法需要做区别.比如通用的弹窗方法不用,以及ipad上打开相册竟然可以支持显示的相册不是全屏了!好吧 ...

最新文章

  1. ruby Mixin用法
  2. 图像在计算机中通过什么方式表示_万物皆可“计算机视觉”
  3. #Node.js的fs导入遇到的问题和解决方案
  4. neo4j删除所有节点
  5. 基于Kubernetes的Spark部署完全指南
  6. JVM内存管理:深入垃圾收集器与内存分配策略
  7. JAVA MD5加密用户信息
  8. Python排序算法---冒泡排序
  9. R-FCN算法的Caffe实现
  10. R语言| 中介效应分析,Mediation包和BruceR包,循环Process函数
  11. VC2005 MFC静态文本框背景色设置
  12. WSJ Merkel Top On Forbes' Most Powerful Women List For 4th Year
  13. 【Maven】私服搭建与使用:nexus,repository,mirror,distributionManagement
  14. 智能化软件开发沙龙优秀学者报告·第1期PPT分享(张天翼 普渡大学)
  15. pydicom提取DICOM胸片图像
  16. PHP:for循环输出表情阵列
  17. 精益生产是什么?为什么你的企业难实现精益生产?
  18. Set与List转换
  19. c语言浮点型菜鸟教程,C语言菜鸟基础教程之单精度浮点数与双精度浮点数
  20. pandas中的get_dummies方法

热门文章

  1. 人体神经系统分布图高清,神经系统图片高清
  2. 保存书店每日交易记录程序设计
  3. python pymysql模块下载_python开发11之PyMySQL模块
  4. MCE | 癌相关基因 ALK 参与胖瘦调节
  5. html制作频谱,HTML5 WebAudioAPI(三)--绘制频谱图
  6. Chrome浏览器的便捷使用方式
  7. 青果教务管理系统存储型XSS 一枚
  8. Ignore the empty nacos configuration and get it based on dataIdnacos配置中心 踩坑
  9. python问卷星微信登录_Python填写问卷星
  10. 考研二战日记——第二天 高数第一章第二节:数列的极限