2016-09-27 40 views
2

我的计划是通过其线程ID打开SMS-Conversation线程。我的代码是:Android通过其线程ID打开特定SMS-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: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://mms-sms/conversations/3 }

谁能帮我这个?提前致谢。

J Doe;)

+0

http://stackoverflow.com/questions/39678042/how-to-open-sms-intent-to-read-not-send-message –

回答

1

这是answer of J. Doe改善。

使用"SMS_NUMBER_AS_STRING_HERE"不是一个完整的解决方案。你必须得到列Telephony.Sms.ADDRESS的价值,并用它来代替只是一个数字。

另一个更正是为意图设置默认SMS包。这是必要的,原因有二:

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

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

这里是我的代码:

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

我自己找到了解决方案。它的工作原理是每个来自一个特定号码的味精来到一个线程。如果您在号码中使用“新短信 - 意图”,则您将收到短信(不是联系人姓名),它将打开整个对话。

只有一条线路:

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