【发布时间】:2015-08-07 09:42:19
【问题描述】:
我正在使用 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);
【问题讨论】:
-
您在 manifest.xml 中定义了哪些权限?
-
你是如何准确构建你的意图的?