【精选】Unity插件NativeGallery拉取手机相册的使用简记

您所在的位置:网站首页 收藏头像如何保存到相册 【精选】Unity插件NativeGallery拉取手机相册的使用简记

【精选】Unity插件NativeGallery拉取手机相册的使用简记

#【精选】Unity插件NativeGallery拉取手机相册的使用简记| 来源: 网络整理| 查看: 265

Unity插件NativeGallery拉取手机相册的使用简记 拉取手机相册文档摘要1. 关于2. 使用设置3.常见问题解答 项目示例 资源链接

拉取手机相册

项目中使用到了拉取手机相册的功能,使用的该插件。插件中有README.txt英文文档,对插件有一定的用法介绍,这里使用中文记录一下,并分享一下自己使用时遇到的问题。

文档摘要

关于API接口,可以自行查看使用。

1. 关于

这个插件可以帮助你在Android和iOS上与Gallery/Photos交互。

2. 使用设置 Android:在Player Settings中将“Write Permission”设置为“External (SDCard)”iOS:有两种方法设置插件在iOS上: iOS自动设置: (可选)修改Plugins/NativeGallery/Editor/NGPostProcessBuild.cs中PHOTO_LIBRARY_USAGE_DESCRIPTION和PHOTO_LIBRARY_ADDITIONS_USAGE_DESCRIPTION的值为“Save media to Photos”。(Unity 2017.4或更早的版本)如果你的最低部署目标(iOS版本)至少是8.0,在NGPostProcessBuild.cs中设置MINIMUM_TARGET_8_OR_ABOVE的值为true。 iOS系统手动配置: 在NGPostProcessBuild.cs中将ENABLED的值设置为false。构建你的项目。在Xcode中的“Info. plist”文件中输入“Privacy - Photo Library Usage Description”。在Xcode中,如果存在的话,也输入一个“Privacy - Photo Library Additions Usage Description”在“Info. plist”文件中。在Xcode中,如果存在,设置“Info. plist”文件中的“Prevent limited photos access alert”属性的值为1(Y)。在Unity- iphone Target(和Unity 2019.3或更新版本上的UnityFramework Target)的“Other Linker Flags”中插入:“-weak_framework PhotosUI -weak_framework Photos -framework AssetsLibrary -framework MobileCoreServices -framework ImageIO”(如果你的部署目标至少是8.0,插入“-weak_framework PhotosUI -framework Photos -framework MobileCoreServices -framework ImageIO”足以)。最后,如果有的话,删除“Photos.framework”和“PhotosUI.framework”,从在构建阶段的链接二进制文件“Unity-iPhone Target”中的“Link Binary With Libraries”(和Unity 2019.3或更新版本的Unity的UnityFramework Target上)。重要:如果你的目标是iOS 14或更高版本,你需要用Xcode 12或更高版本来构建你的应用,以避免任何权限问题。

个人着重标注:括号中的内容要特别注意,尤其我用红字标注的,项目中因为没有在意其内容,导致项目无法打包运行测试,最后各种尝试耗时很久之后终于成功之后,发现差的就是忽视的那些内容。直到记录这个文章的时候才发现。。。哭(╥╯^╰╥)

3.常见问题解答 在iOS系统中,如何获取已保存图像的路径或选中图像的原始路径? 不能获取。在iOS上,这些文件被存储在一个我们无法访问的内部目录中(我认为甚至没有办法获取内部路径)。Android构建失败,在控制台返回:“error: attribute Android:requestLegacyExternalStorage not found”。 "android:requestLegacyExternalStorage"属性在AndroidManifest.xml修复一个罕见的unauthoredaccessexception在android 10上,但要求你更新你的android SDK到至少SDK 29版本。如果这对你来说不可能,你应该使用WinRAR或7-Zip打开NativeGallery.aar,然后删除""标签从AndroidManifest.xml。不能访问相册,日志上面显示着"java.lang.ClassNotFoundException: com.yasirkula.unity.NativeGallery"。 如果你确定你的插件是最新的,那么在播放器设置中启用“Custom Proguard File”选项,并添加以下行到该文件:-keep class com.yasirkula.unity.* {*; }。没有什么发生时,我试图在Android上访问相册。 确保你已经在Player Settings中将“Write Permission”设置为“External (SDCard)”。NativeGallery函数返回Permission。即使我将“Write Permission”设置为“External (SDCard)”也被拒绝。 在Plugins/Android/AndroidManifest.xml文件中手动声明WRITE_EXTERNAL_STORAGE权限,如下所示:。 您需要将以下属性添加到元素:xmlns:tools="http://schemas.android.com/tools"。保存图像/视频不能正常工作。 确保Save函数的“filename”参数也包含文件的扩展名。 项目示例

我这边项目中测试使用的只有3个接口函数,分别是:访问相册(NativeGallery.GetImageFromGallery)、读取图片(NativeGallery.LoadImageAtPath)和视频保存导向相册(NativeGallery.SaveVideoToGallery)。

首先,就是项目中主要用到的拉取相册的功能。使用起来很简单,函数第一个参数是一个委托,字符串string参数无返回值的委托,是当你在相册中选择一个图片之后,唤醒的一个委托事件,通常适用于项目中的加载选中图片的;第二个是题目;第三个是图片的格式后缀。 private void PhotoAlbum() {//相册选择 NativeGallery.Permission permission = NativeGallery.GetImageFromGallery(PhotoAlbum, "选择一张图片", "image/png"); } 当在相册中选择了一张照片之后,就需要加载为项目这张照片。 下面代码中的函数,就上面提到的用于加载的委托事件。函数传入的就是照片的路径(path);2048是我设置的图片的的最大尺寸;最后一个是图片纹理文件是否要标记为不可读。 当然在知道了照片的路径(path)之后,其实可以不使用该函数加载。可以使用自己写的函数或方法,如Unity就可以使用Unity自己的异步加载方法UnityWebRequestTexture.GetTexture("file://" + path)加载照片。 Texture2D texture2D; private void PhotoAlbum(string path) { texture2D = NativeGallery.LoadImageAtPath(path, 2048, false); } 下面的函数是用于保存视频到相册中。 目前只在iOS系统测试成功;安卓方面好像是因为系统升级,Unity无法访问除应用根目录意外的内存空间文件,如果有能解决这个问题的小伙伴,希望能分享给我。 这里要注意一点,视频其实是在上一步就已经录好,并已经储存在内存当中的。只是因为权限等原因,手机相册并不会显示该视频,这个函数只是让相册显示该视频而已,并不具备储存视频到内存的功能。 故,函数中第一个参数就是视频在内存中的路径;第二个是相册中视频所在的文件夹,如果没有会自动创建;第三个就是视频的名称;最后就是在操作完成后,可能需要运行的委托事件,这里我就是直接将结果打印出来。 public void SaveRecording() { if (Application.platform == RuntimePlatform.Android) {//未实现 string path = Application.persistentDataPath; int index = path.IndexOf('0') + 2; path = path.Remove(0, index); NativeGallery.SaveVideoToGallery(m_resultPath, path, "Test_{0}.mp4", (string error) => { Debug.Log("保存视频结果:" + error); }); } else if (Application.platform == RuntimePlatform.IPhonePlayer) {//已实现 NativeGallery.SaveVideoToGallery(m_resultPath, "Test", "Test_{0}.mp4", (string error) => { Debug.Log("保存视频结果:" + error); }); } RemoveRecording(); } 资源链接

插件资源目前还都是免费的:

Unity插件商店:https://assetstore.unity.com/packages/tools/integration/native-gallery-for-android-ios-112630Github:https://github.com/yasirkula/UnityNativeGallery


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3