如何通过隐式意图打开短信应用程序?

10

我遵循这段代码:

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    intent.setType("vnd.android-dir/mms-sms");
    startActivity(intent);

它适用于Android 5.1,但不适用于Android 6.0,因为android.content.ActivityNotFoundException: No Activity found to handle Intent,那么如何通过隐式意图打开短信应用程序?

编辑:

  1. 你看了我的帖子吗?我需要打开应用程序,而不是发送消息。

  2. 我检查了这个帖子,但它不起作用!


请使用意图启动短信应用程序。 - Bhoomika Brahmbhatt
是的,我知道,但它也不起作用。 - D. Wayne
请查看此链接 - https://dev59.com/XnE95IYBdhLWcg3wSsCD - Onkar Nene
@OnkarNene 我说了,它不起作用! - D. Wayne
@ D. Wayne:在打开短信应用程序后,它将使用您上面的代码显示消息列表。如果我知道来电号码,我们可以打开用户的详细信息吗?当使用默认应用程序读取传入的短信时,我遇到了相同的问题。 - Jame
10个回答

20

你可以尝试这个方法,它对我有效:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_MESSAGING);
startActivity(intent);

1
这个可以用,其他与此问题相关的SO线程中的答案使用了已弃用的函数。 - almost a beginner
3
因为我想查看短信列表而不是发送短信,所以对我很有用。 - Nayan

8

使用这个:

public void composeSmsMessage(String message, String 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);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

官方文档


3

以下代码在我这里完美运行,希望能对其他人有所帮助

如果你想返回应用程序,这段代码也可以正常工作

Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.parse("smsto:" + phoneNumber)); // This ensures only SMS apps respond
        intent.putExtra("sms_body", "Hey downaload Whozhere app");
        startActivity(intent);

3
尝试这个:-
try {

     Intent intent = new Intent(Intent.ACTION_VIEW);     
     intent.putExtra("sms_body", message);    
     intent.setData(Uri.parse("sms:"));
     startActivity(intent);
} catch (android.content.ActivityNotFoundException anfe) {
    Log.d("Error" , "Error");
}

正常运行。 - jojo
@Ankesh kumar Jaisansaria 请问在“...setData(Uri.parse”String:“)之后的字符串是什么有关系吗?我看到很多例子使用“sms:”,还有很多使用“smsto:”。 - AJW

3

试试这个:

Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address", "12125551212");
smsIntent.putExtra("sms_body","Body of Message");
startActivity(smsIntent);

2

官方文档 https://developer.android.com/guide/components/intents-common#SendMessage

该页面介绍了Android中的Intents,这是一种允许应用程序在运行时进行交互的机制。通过使用Intent,您可以启动其他应用程序的活动、发送广播以及执行其他操作。此外,页面还提供了有关如何使用Intent发送消息的详细信息。
public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setType(HTTP.PLAIN_TEXT_TYPE);
    intent.putExtra("sms_body", message);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

0

你可以在清单文件中使用意图过滤器来实现深度链接


0
Intent intent = new Intent(Intent.ACTION_SENDTO);

intent.setData(Uri.parse("smsto:" + Uri.encode(phoneNumber))); startActivity(intent);

意图.setData(Uri.parse("smsto:" + Uri.encode(手机号码))); 开始活动(意图);


你好,请添加注释以解释你的答案(以及为什么我们应该使用你的而不是已经接受的答案)。请在每行代码的开头添加4个空格,以使其格式良好! - NatNgs

0

你可以使用这个工具

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:" + Uri.encode(phoneNumber)));
startActivity(intent);

0
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

它正在工作


1
你能解释一下这段代码是如何工作的吗?除了"它能用"之外的一些细节会很有帮助。 - user10216583

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接