Синтаксис:
Используется csharp
public class Share : MonoBehaviour
{
static AndroidJavaClass intentClass;
static AndroidJavaClass uriClass;
static AndroidJavaClass unity;
static AndroidJavaObject currentActivity;
static AndroidJavaObject uriObject;
static AndroidJavaObject jChooser;
static bool IsInit = false;
static void Init()
{
IsInit = true;
intentClass = new AndroidJavaClass("android.content.Intent");
uriClass = new AndroidJavaClass("android.net.Uri");
unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
}
public static void ShareImage(string shareText, string imagePath, string subject = "")
{
#if UNITY_ANDROID
if (!IsInit)
Init();
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), shareText );
uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + imagePath);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
intentObject.Call<AndroidJavaObject>("setType", "image/*");
jChooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, subject);
currentActivity.Call("startActivity", jChooser);
#endif
}
}
Вызываю статическую функцию при нажатии на кнопку. Путь к изображению хранится в папке приложения. И всё даже работает. Но не на всех моделях телефона.
конкретнее на телефоне Huawei PIC LX9 шара не работает а в логах пишется
06-18 14:22:44.160 14153 14185 E Unity : AndroidJavaException: android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.MyCompany.ShareTest/files/Screenshot/testImage.png exposed beyond app through ClipData.Item.getUri()
06-18 14:22:44.160 14153 14185 E Unity : android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.MyCompany.ShareTest/files/Screenshot/testImage.png exposed beyond app through ClipData.Item.getUri()
06-18 14:22:44.160 14153 14185 E Unity : at android.os.StrictMode.onFileUriExposed(StrictMode.java:1975)
06-18 14:22:44.160 14153 14185 E Unity : at android.net.Uri.checkFileUriExposed(Uri.java:2363)
06-18 14:22:44.160 14153 14185 E Unity : at android.content.ClipData.prepareToLeaveProcess(ClipData.java:941)
06-18 14:22:44.160 14153 14185 E Unity : at android.content.Intent.prepareToLeaveProcess(Intent.java:9944)
06-18 14:22:44.160 14153 14185 E Unity : at android.content.Intent.prepareToLeaveProcess(Intent.java:9929)
06-18 14:22:44.160 14153 14185 E Unity : at android.app.Instrumentation.execStartActivity(Instrumentation.java:1622)
06-18 14:22:44.160 14153 14185 E Unity : at android.app.Activity.startActivityForResult(Activity.java:4762)
06-18 14:22:44.160 14153 14185 E Unity : at android.app.Activity.startActivityForResult(Activity.java:4702)
06-18 14:22:44.160 14153 14185 E Unity : at android.app.Activity.startActivity(Activity.java:5123)
Вроде как жалуется на отсутствие прав доступа к изображению, но файл же в папке приложения и доступ должен быть. Вконце концов приложение его само и создало.
Помогите разобраться в чём может быть проблема и как исправить.