152

我对意图有疑问...我尝试启动短信应用...

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setType("vnd.android-dir/mms-sms");
int flags = Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP |
    Intent.FLAG_ACTIVITY_CLEAR_TOP;
intent.setFlags(flags);
intent.setData(Uri.parse("content://sms/inbox"));
context.startActivity(intent);

所以,你可以看到我在我的意图中投入了太多的东西,但那是因为我不知道我该怎么做......谢谢

4

21 回答 21

245

要开始启动 sms 活动,您只需要这样:

Intent sendIntent = new Intent(Intent.ACTION_VIEW);         
sendIntent.setData(Uri.parse("sms:"));

您可以添加额外内容以填充您自己的消息,例如这样

sendIntent.putExtra("sms_body", x); 

然后只需 startActivity 就可以了。

startActivity(sendIntent);
于 2010-03-03T15:46:45.943 回答
142
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);
于 2012-03-12T09:54:22.457 回答
50

如果 android 版本是 Kitkat 或以上,用户可以更改默认的短信应用程序。此方法将获取默认短信应用程序并启动默认短信应用程序。

private void sendSMS() {    
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // At least KitKat
      {
         String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(this); // Need to change the build to API 19

         Intent sendIntent = new Intent(Intent.ACTION_SEND);
         sendIntent.setType("text/plain");
         sendIntent.putExtra(Intent.EXTRA_TEXT, "text");

         if (defaultSmsPackageName != null)// Can be null in case that there is no default, then the user would be able to choose
         // any app that support this intent.
         {
            sendIntent.setPackage(defaultSmsPackageName);
         }
         startActivity(sendIntent);

      }
      else // For early versions, do what worked for you before.
      {
         Intent smsIntent = new Intent(android.content.Intent.ACTION_VIEW);
         smsIntent.setType("vnd.android-dir/mms-sms");
         smsIntent.putExtra("address","phoneNumber");         
         smsIntent.putExtra("sms_body","message");
         startActivity(smsIntent);
      }
   }
于 2014-07-17T13:13:14.347 回答
31
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

这就是你所需要的。

于 2011-01-28T08:16:55.147 回答
26

如果您想从其他一些活动中启动 SMS 撰写活动,并且还必须传递电话号码和 SMS 文本,请使用以下代码:

Uri sms_uri = Uri.parse("smsto:+92xxxxxxxx"); 
Intent sms_intent = new Intent(Intent.ACTION_SENDTO, sms_uri); 
sms_intent.putExtra("sms_body", "Good Morning ! how r U ?"); 
startActivity(sms_intent); 

注意:这里sms_bodysmsto:是用于在 SMS 撰写活动中识别文本和电话号码的键,所以在这里要小心。

于 2012-12-03T15:34:51.397 回答
18

这是打开 SMS 活动的代码,该活动预先填充了 SMS 必须发送到的电话号码。这在模拟器和设备上都可以正常工作

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.setData(Uri.parse("sms:" + phoneNumber));
startActivity(smsIntent);
于 2012-05-16T06:18:17.767 回答
6

kotlin 中,这可以很容易地实现,如下所示:

/**
 * If android version is Kitkat or above, users can change default sms application.
 * This method will get default sms app and start default sms app.
 */
private fun openSMS() {
    val message = "message here"
    val phone = "255754......." //255 Tanzania code.

    val uri = Uri.parse("smsto:+$phone")
    val intent = Intent(Intent.ACTION_SENDTO, uri)

    with(intent) {
        putExtra("address", "+$phone")
        putExtra("sms_body", message)
    }

    when {
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT -> {
            //Getting the default sms app.
            val defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(context)

            // Can be null in case that there is no default, then the user would be able to choose
            // any app that support this intent.
            if (defaultSmsPackageName != null) intent.setPackage(defaultSmsPackageName)

            startActivity(intent)
        }
        else -> startActivity(intent)
    }
}

这是@mustafasevgi 的修改答案

于 2019-06-22T21:32:25.447 回答
5

利用

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");
于 2011-09-30T07:39:29.320 回答
4

我用:

Intent sendIntent = new Intent(Intent.ACTION_MAIN);
sendIntent.putExtra("sms_body", "text");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);
于 2012-03-08T14:17:09.460 回答
4
Intent eventIntentMessage =getPackageManager()
 .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(getApplicationContext));
startActivity(eventIntentMessage);
于 2015-09-11T15:03:13.710 回答
3
try {
    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.setData(Uri.parse("smsto:" + Uri.encode(number)));
    smsIntent.putExtra("address", number);
    smsIntent.putExtra("sms_body", message);

    PackageManager pm = activity.getPackageManager();
    List<ResolveInfo> resInfo = pm.queryIntentActivities(smsIntent, 0);

    for (int i = 0; i < resInfo.size(); i++) {
        ResolveInfo ri = resInfo.get(i);
        String packageName = ri.activityInfo.packageName;

        if (packageName.contains("sms")) {
            //Log.d("TAG", packageName + " : " + ri.activityInfo.name);
            smsIntent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
        }
    }
    activity.startActivity(smsIntent);
} catch (Exception e) {
    // Handle Error
}

这样做的最佳方式。

于 2016-02-20T02:20:34.837 回答
3

您可以打开默认短信应用程序并传递详细信息,如下所示:
注意:如果您想发送到多个号码,请用“;”分隔每个号码 内部字符串

String mblNumVar = "9876543210;9123456789";
Intent smsMsgAppVar = new Intent(Intent.ACTION_VIEW);
smsMsgAppVar.setData(Uri.parse("sms:" +  mblNumVar));
smsMsgAppVar.putExtra("sms_body", "Hello Msg Tst Txt");
startActivity(smsMsgAppVar);

|或| 使用此功能:

void openSmsMsgAppFnc(String mblNumVar, String smsMsgVar)
{
    Intent smsMsgAppVar = new Intent(Intent.ACTION_VIEW);
    smsMsgAppVar.setData(Uri.parse("sms:" +  mblNumVar));
    smsMsgAppVar.putExtra("sms_body", smsMsgVar);
    startActivity(smsMsgAppVar); 
}
于 2017-07-18T20:16:43.540 回答
2

与默认 SMS 应用程序一起使用的最佳代码是。

Uri SMS_URI = Uri.parse("smsto:+92324502****"); //Replace the phone number
Intent sms = new Intent(Intent.ACTION_VIEW,SMS_URI);    
sms.putExtra("sms_body","This is test message"); //Replace the message witha a vairable 
startActivity(sms);
于 2017-06-21T11:25:54.270 回答
2
Intent sendIntent = new Intent(Intent.ACTION_SEND); 
//CHANGE YOUR MESSAGING ACTIVITY HERE IF REQUIRED 
sendIntent.setClassName("com.android.mms", "com.android.mms.ui.ComposeMessageActivity");
sendIntent.putExtra("sms_body",msgbody); 
sendIntent.putExtra("address",phonenumber);
//FOR MMS
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/mms.png"));
sendIntent.setType("image/png");
startActivity(sendIntent);
于 2017-02-16T10:34:09.580 回答
1

撰写短信:

Uri smsUri = Uri.parse("tel:" + to);
Intent intent = new Intent(Intent.ACTION_VIEW, smsUri);
intent.putExtra("address", to);
intent.putExtra("sms_body", message);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);
于 2015-05-26T13:19:07.443 回答
1

以下代码适用于 android 6.0。
它将在默认消息传递应用程序中打开搜索活动,其中包含与提供的特定字符串相关的对话。

Intent smsIntent = new Intent(Intent.ACTION_MAIN);
        smsIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        smsIntent.setClassName("com.android.mms", "com.android.mms.ui.SearchActivity");
        smsIntent.putExtra("intent_extra_data_key", "string_to_search_for");
        startActivity(smsIntent);  

您可以通过意图启动搜索活动。这将打开默认消息传递应用程序的搜索活动。现在,要在搜索活动中显示特定对话的列表,您可以将搜索字符串作为额外的字符串提供,键为

“intent_extra_data_key”

如此类的 onCreate 所示

String searchStringParameter = getIntent().getStringExtra(SearchManager.QUERY);
    if (searchStringParameter == null) {
        searchStringParameter = getIntent().getStringExtra("intent_extra_data_key" /*SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA*/);
    }
    final String searchString = searchStringParameter != null ? searchStringParameter.trim() : searchStringParameter;

您还可以将短信的 SENDER_ADDRESS 作为字符串额外传递,这将列出与该特定发件人地址的所有对话。

检查com.android.mms.ui.SearchActivity了解更多信息

你也可以检查这个答案

于 2017-05-21T10:22:00.387 回答
1

对于Kotlin ,只需这样做:

val messageIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:03xxxxxxxxx"))
    messageIntent.putExtra("sms_body", "Enter your body here")
    startActivity(messageIntent)
于 2021-08-21T10:35:13.423 回答
0

在模拟器上为我工作

Intent i = new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", number, null));
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                i.putExtra("sms_body", remindingReason);

                startActivity(i);
于 2012-12-25T13:43:39.820 回答
0

短信意图:

Intent intent = new Intent("android.intent.action.VIEW");
        /** creates an sms uri */
        Uri data = Uri.parse("sms:");
        intent.setData(data);
于 2013-08-05T10:15:41.447 回答
0

您可以使用以下代码片段来实现您的目标:

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+model.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.putExtra("sms_body","Hello this is dummy text");
startActivity(smsIntent);

如果您不想要任何文本,请删除 sms_body 键。

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+shopkepperDataModel.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(smsIntent);
于 2020-07-17T04:16:19.347 回答
0

您可以使用它,两者都可以在 4.4 以上的 android 上正常工作

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

或者

    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.putExtra("sms_body","Body of Message");
    smsIntent.setData(Uri.parse("sms:9212107320"));
    startActivity(smsIntent);
于 2020-04-05T21:12:39.200 回答