Android通过其Thread-ID打开特定的SMS-Thread

时间:2016-09-27 16:05:25

标签: java android android-intent sms

我的计划是通过其thread-id打开一个SMS-Conversation Thread。我的代码是:

    long threadId = Long.parseLong(THREAD_ID);


    Intent defineIntent = new Intent(Intent.ACTION_VIEW);
    defineIntent.setData(Uri.parse("content://mms-sms/conversations/"+threadId));
    context.startActivity(defineIntent);

但我收到以下错误:

  

09-27 16:01:07.696:ActivityNotFoundException:找不到任何活动   处理Intent {act = android.intent.action.VIEW   dat = content:// mms-sms / conversations / 3}

任何人都可以帮我解决这个问题吗?提前谢谢。

J Doe;)

2 个答案:

答案 0 :(得分:3)

我自己找到了解决方案。它起作用,因为来自一个特定Number的每个msg都来自一个线程。如果您使用“新的短信 - 意图”与您收到短信的号码(不是联系人姓名),它将打开整个会话。

只需一行:

context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", "SMS_NUMBER_AS_STRING_HERE", null)));

答案 1 :(得分:1)

这是对answer of J. Doe的改进。

使用"SMS_NUMBER_AS_STRING_HERE"不是一个完整的解决方案。您必须获取列Telephony.Sms.ADDRESS的值并使用它而不是数字。

另一项更正是为意图设置默认SMS包。这需要有两个原因:

  1. 避免系统'选择应用程序'对话框。

  2. 只有默认的短信应用可以发送短信,因此如果用户选择其他应用,它可能会收到错误消息(就像我使用环聊一样),尽管您使用ACTION_VIEW意图。

  3. 这是我的代码:

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", address, null));
    intent.setPackage(Telephony.Sms.getDefaultSmsPackage(context));