Android上的Unity3d共享图像 [英] Unity3d share image on android

查看:165
本文介绍了Android上的Unity3d共享图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试在Unity游戏上实现android图像共享,我已经汇总了几个资源,这是我当前的代码。-

Trying to implement android image sharing on a Unity game, I've put together several sources, this is my current code.-

public static void shareImage(string subject, string title, string message, string imagePath) {
    #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/png");
    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");
    AndroidJavaClass fileClass = new AndroidJavaClass("java.io.File");

    AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + imagePath);

    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
}

我觉得还可以,和与...共享... 对话框被打开,但是图像没有出现,并且我在Android控制台上看到错误。-

it looks ok to me, and share with... dialog gets opened, but the image isn't appearing, and I'm seeing an error on android console.-

java.lang.ClassCastException: android.net.Uri$StringUri cannot be cast to java.util.ArrayList
    at android.os.Bundle.getParcelableArrayList(Bundle.java:805)
    at android.content.Intent.getParcelableArrayListExtra(Intent.java:5823)
    at com.whatsapp.ContactPicker.b(ContactPicker.java:93)
    at com.whatsapp.ContactPicker.onCreate(ContactPicker.java:551)
    at android.app.Activity.performCreate(Activity.java:6500)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3218)
    at android.app.ActivityThread.access$1000(ActivityThread.java:198)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:6837)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

我猜想android期望 EXTRA_STREAM 是一个 ArrayList ,但是据我所知这只是真的使用 ACTION_SEND_MULTIPLE 时。我可能会在这里遗漏一些明显的东西吗?

I'm guessing that android is expecting EXTRA_STREAM to be an ArrayList, but as far as I know this is only true when using ACTION_SEND_MULTIPLE. May I be missing something obvious here?

推荐答案

最后,问题与例外无关,外部应用程序却没有附件文件的可见性,因为我将它们保存在内部应用程序存储中。

Finally, the issue had nothing to do with the exception, external apps just had no visibility for attached files as I was saving them on internal app storage.

启用 WriteAccess->外部(SDCard)在Unity上播放器设置解决了该问题。

Enabling WriteAccess->External (SDCard) on Unity Player settings solved the issue.

这篇关于Android上的Unity3d共享图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆