我正在使用Unity游戏引擎创建游戏。在这个游戏中,我抓住了一个截图并将其保存到Unity的默认文件夹中(" Application.persistentDataPath"):
/data/data/de.mytest.mygame/files/Screenshot.png
现在我想通过Android分享这个截图。为此,我要从Unity调用相应的java代码。
例如,返回TRUE:
AndroidJavaObject fileObject = new AndroidJavaObject("java.io.File", imageFileName);
bool fileExist = fileObject.Call<bool>("exists");
Debug.Log("File exist : " + fileExist);
但是当我尝试使用android.content.Intent和putExtra创建共享意图来共享此图像时,我得到一个异常:
java.io.FileNotFoundException: /data/data/de.mytest.mygame/files/Screenshot.png:打开失败:EACCES (许可被拒绝)
如何解决此权限问题?
编辑: 意图是这样创建的:
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
intentObject.Call<AndroidJavaObject>("setType", "image/*");
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), subject);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TITLE"), title);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), message);
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
AndroidJavaObject fileObject = new AndroidJavaObject("java.io.File", imageFileName);
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("fromFile", fileObject);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
currentActivity.Call ("startActivity", intentObject);
答案 0 :(得分:0)
您可能遗漏了其中一项权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
答案 1 :(得分:0)
在清单
中添加权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
答案 2 :(得分:0)
由于安全问题,无法从App文件夹轻松共享文件,并且您不能只跨应用程序共享File对象。通常的方法是实现ContentProvider或只使用FileProvider。所以你分享的是文件的URI,另一个应用程序从提供者那里读取它。
但为此,您必须在Unity项目中添加一些代码作为Android plugin的提供程序,并在清单中声明它以便可以调用它。
我认为使用Environment的方法将文件保存在共享图片文件夹中可能更容易(尽管不是很干净):
File path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File file = new File(path, "Screenshot.png");
// write to that file
稍后使用Intent.EXTRA_STREAM作为额外密钥将URI共享到文件中:
intent.putExtra(Intent.EXTRA_STREAM, imageUri);