记录Unity调用安卓及IOS拍照、相册的坑
好久没有写文档啦,只怪自己懒。最近开发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
下一篇: 蜀汉军衔最高的武将是谁?是五虎上将吗?