欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

记录Unity调用安卓及IOS拍照、相册的坑

程序员文章站 2022-06-24 18:13:36
好久没有写文档啦,只怪自己懒。最近开发Unity的头像上传功能,在此记录过程中遇到的问题及解决方案。(一) 安卓端 1.安卓因为版本不同,在Android6.0以后,需要添加运行时访问权限,应在调用相机的地方进行权限验证,代码如下if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ......

    好久没有写文档啦,只怪自己懒。最近开发Unity的头像上传功能,在此记录过程中遇到的问题及解决方案。

(一) 安卓端

       1.安卓因为版本不同,在Android6.0以后,需要添加运行时访问权限,应在调用相机的地方进行权限验证,代码如下

if (checkSelfPermission(Manifest.permission.CAMERA)
                    != PackageManager.PERMISSION_GRANTED) {

                requestPermissions(new String[]{Manifest.permission.CAMERA},
                        1);
            }
            else
            {
               //拍照逻辑
            }

    2.通过系统API来返回bitMap 在有些手机上会出现问题,导致异常。 解决方案是把图片缓存起来,然后通过URI去访问。

    3.权限问题,权限一定要齐全,写入权限,读取权限等等,可自行查找所需要的权限内容。

    4.最坑的一点来了!!!在功能写好后,三星手机出现不能退出拍照、 不能退出相册的问题! 查看手机日志无明显的异常。网上搜了好久的解决方案,均无法解决该问题。最后搜到一篇文档,三星手机在MediaStore.ACTION_IMAGE_CAPTURE调起系统相机后,会销毁到activity!!!导致无法返回到之前的activity!解决方案是在配置文件里配置activity属性:android:configChanges="orientation|keyboardHidden|screenSize"(主要是screenSize),此博文地址:https://blog.csdn.net/weixin_30567471/article/details/95861821   大家自行参考。

(二)IOS端

   1.IOS端还是很舒服的,得益于苹果系统的唯一性,无需做许多的测试。然鹅,开发过程中还是遇到了一些需要区分平台的问题。我们的App也需要适配Ipad的,所以在调用IOS的 UIAlertController的时候,在IPAD上出现闪退现象。搜了一下,在Ipad上,是需要使用UIAlertControllerStyleAlert的,代码如下

    alert = [UIAlertController alertControllerWithTitle:@"选择照片" message:nil preferredStyle:(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? UIAlertControllerStyleAlert : UIAlertControllerStyleActionSheet)];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action){
        [self dismissWrappedController];
        [self Dis];
        
        
    }];
    UIAlertAction *cameraAction = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self showPicker:UIImagePickerControllerSourceTypeCamera vc:app];
    }];
    UIAlertAction *photosAction = [UIAlertAction actionWithTitle:@"从相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self showPicker:UIImagePickerControllerSourceTypePhotoLibrary vc:app];
    }];

2.照片选择器在Iphone和Ipad也是有区别的,具体使用方式如下:

if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
    {
        if([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0)
        {
            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                
                [self presentViewController:picker animated:NO completion:nil];
            }];
        }
        else{
            [self presentViewController:picker animated:NO completion:nil];
        }
    }
    else
    {
        // wrap and show the modal
        [app presentModalViewController:picker animated:YES];
    }

 

以上是此功能的开发记录,有其它的问题及解决方案随时更新,或者有更好的方案请提出矫正,谢谢大家!如有 帮助,请点赞!

 

本文地址:https://blog.csdn.net/zyl766800/article/details/112807366