打开带有附件的短信应用程序

时间:2019-07-11 08:11:49

标签: android unity3d android-intent android-gradle

我正在尝试从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"));

3 个答案:

答案 0 :(得分:1)

在致电 startActivity(intent);

之前

添加以下行:

y

然后打电话

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

答案 1 :(得分:0)

以下是您问题的可能答案(请注意代码中的其他行以及ACTION_SENDTOACTION_SEND的转换)-

public void composeMmsMessage(String message, Uri attachment, long phoneNumber) {
     Intent intent = new Intent(Intent.ACTION_SEND);
     intent.setData(Uri.parse("smsto:" + phoneNumber));  // This ensures only SMS apps respond
     intent.putExtra("sms_body", message); // For the text that you want to send
     intent.putExtra(Intent.EXTRA_STREAM, attachment); // For the atachment, which be a photo, video, file, etc. If you are using Firebase, you might want to take a look at the official Firebase Docs Page on this topic - https://firebase.google.com/docs/storage/unity/start
     if (intent.resolveActivity(getPackageManager()) != null) {
         startActivity(intent);
     }
 }

这是android mainfest-

<activity ...>
     <intent-filter>
         <action android:name="android.intent.action.SEND" />
         <data android:type="text/plain" />
         <data android:type="image/*" />
         <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
</activity>

希望这会有所帮助!

来源-https://developer.android.com/

答案 2 :(得分:-1)

尝试

Intent intent = new Intent(Intent.ACTION_SEND);
    intent.putExtra("sms_body", "Hi how are you");
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File("/sdcard/file.gif")));
    intent.setType("image/gif");
    startActivity(Intent.createChooser(intent,"Send"));