【问题标题】:Unity3d share image on androidUnity3d 在 android 上共享图像
【发布时间】:2016-09-05 15:59:45
【问题描述】:

试图在Unity游戏上实现android图像共享,我整理了几个来源,这是我目前的代码。-

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
}

在我看来没问题,share with... 对话框被打开,但图像没有出现,我在 android 控制台上看到一个错误。-

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 时才成立。我可能在这里遗漏了一些明显的东西吗?

【问题讨论】:

  • 您的代码看起来不错。你能扩展堆栈跟踪吗?异常发生在代码的哪一行?
  • 谢谢@naXa,刚刚更新了我的问题;统一代码工作正常,一旦我单击共享并选择我要共享的应用程序,android就会抛出异常。
  • 感谢@Programmer,我认为一般代码非常相似,但是那个问题并没有涉及 mh 问题,知道为什么会抛出异常吗?

标签: android unity3d share classcastexception


【解决方案1】:

最后,这个问题与异常无关,外部应用只是看不到附件,因为我将它们保存在内部应用存储中。

在 Unity Player settings 上启用 WriteAccess-&gt;External (SDCard) 解决了该问题。

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 2023-04-03
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多