Sharing an image on Android

I’m trying to share a screenshot taken in Unity via the Android intent system.

Here’s my code for taking the screenshot:

Application.CaptureScreenshot ("Bla.png");
        ShareImage (Application.persistentDataPath + "/Bla.png", subject, title, message);

Here’s my Android-Code for calling the sharing intent:

    public static void ShareImage(string imageFileName, string subject, string title, string message)
    {
        #if UNITY_ANDROID
       
        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);

        bool fileExist = fileObject.Call<bool>("exists");
        Debug.Log("File exist : " + fileExist);
        // Attach image to intent
        if (fileExist)
            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);

        #endif
    }

The result is not was I was hoping for. The share-overlay opens fine, but the image is missing.
By using Android’s debug console I found the following error:

The file seems to exist (fileExist is true), but there is some kind of permission problem…
Can anyone help me out?
Thanks!

Go to Player Settings and change Write Access to External (SDCard)

3 Likes