有目的地启动短信应用程序

Oli*_*r69 142 sms android android-intent

我有一个关于意图的问题......我尝试启动短信应用...

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);
Run Code Online (Sandbox Code Playgroud)

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

jqp*_*liq 235

要开始启动短信活动,您只需要:

Intent sendIntent = new Intent(Intent.ACTION_VIEW);         
sendIntent.setData(Uri.parse("sms:"));
Run Code Online (Sandbox Code Playgroud)

您可以添加额外内容来填充您自己的消息,如下所示

sendIntent.putExtra("sms_body", x); 
Run Code Online (Sandbox Code Playgroud)

然后只是startActivity与意图.

startActivity(sendIntent);
Run Code Online (Sandbox Code Playgroud)

  • 要在'到'框中自动包含电话号码,请将setData代码行更改为`sendIntent.setData(Uri.parse("sms:"+ phoneNumber));`(谢谢你jqpubliq和jaydeepw) (20认同)
  • 当用户通过 Intent ti 短信从我的应用程序发送短信时,我需要检查短信是否发送,我该怎么做? (2认同)

小智 138

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);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这不适用于Android 4.4,可能还有..."不再支持"vnd.android-dir/mms-sms" (20认同)
  • 最好的解决方案!谢谢! (4认同)
  • `android.content.ActivityNotFoundException:找不到处理Intent的Activity {act = android.intent.action.VIEW typ = vnd.android-dir/mms-sms(has extras)}` (4认同)
  • 如果没有添加电话号码,只需添加:`intent.setData(Uri.parse("smsto:"+ phoneNumber));` (3认同)
  • 刚刚在Android 4.4.2上测试过,它正在运行.你可以把我链接到那个公告吗?@MaxCh (2认同)

mus*_*vgi 46

如果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);
      }
   }
Run Code Online (Sandbox Code Playgroud)

  • @KarthikeyanVe,你能试试吗?Intent sendIntent = new Intent(Intent.ACTION_SENDTO); sendIntent.setData(Uri.parse( "smsto:PHONENUMBER")); (3认同)
  • 我正在使用KitKat版本.我想在To字段中设置接收者号码.我怎么设置? (2认同)
  • 很好的答案.如果您想直接转到默认的短信应用,请使用,就像魅力一样.如果你想选择在这里看到其他答案. (2认同)

sky*_*sle 31

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

这就是你所需要的.


Pir*_*hah 22

如果您想从其他一些活动启动SMS Composing活动,并且还必须传递电话号码和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); 
Run Code Online (Sandbox Code Playgroud)

注:这里的sms_bodysmsto:是不承认在撰写短信活动的文字和电话按键,所以要小心这里.


Jay*_*epW 17

以下是将打开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); 
Run Code Online (Sandbox Code Playgroud)


Har*_*der 5

使用

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");
Run Code Online (Sandbox Code Playgroud)


Nux*_*Nux 5

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是@mustafasevgi 的修改答案