首页 > 解决方案 > 打开带有附件的短信应用程序

问题描述

我正在尝试从 Unity 应用程序启动一个 Intent,该应用程序将启动带有附件的短信应用程序。

我已经能够打开短信应用程序,但附件无法正确加载,引发以下异常:

'无法确定文件的类型:///storage/emulated/0/Android/data/com.torpedoesaway.memematch/files/Gifit2MemeFiles/gifit2meme-2019-09-7-09-39-54.gif java.io。 IOException:java.lang.RuntimeException:setDataSource 失败:状态 = 0x80000000'

请注意,我还尝试加载其他图像,例如 png 和 jpg,都抛出相同的错误。

这是我的代码:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:" + recipient));
intent.putExtra("sms_body", message);
intent.putExtra(Intent.EXTRA_STREAM, attachment);

if (intent.resolveActivity(activity.getPackageManager()) != null) {
   activity.startActivity(intent);
}

我尝试使用意图操作以及setData/setType调用,在一种情况下,我能够打开选择器,选择消息传递应用程序,然后正确加载附件。但是,我想在附件正常工作的情况下直接打开短信应用程序。

在此先感谢您的帮助!

编辑:

我如何从 Unity 拨打电话:

AndroidJavaClass Uri = new AndroidJavaClass("android.net.Uri");
        AndroidJavaObject uri = Uri.CallStatic<AndroidJavaObject>("parse", path);

        unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        pluginClass = new AndroidJavaObject("com.torpedosaway.giftomessage.Gif2Message");
        pluginClass.Call(
            "ComposeMmsMessage",
            "53876045",
            "message",
            uri,
            unityClass.GetStatic<AndroidJavaObject>("currentActivity"));

标签: androidunity3dandroid-intentandroid-gradle-plugin

解决方案


就在您调用startActivity(intent);之前

添加这些行:

StrictMode.VmPolicy.Builder builder = StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());

然后打电话

startActivity(intent);

推荐阅读