Android 有目的地启动sms应用程序

Android 有目的地启动sms应用程序,android,sms,android-intent,Android,Sms,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(fl

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

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);
所以,你可以看到我在我的意图中放了太多的东西,但那是因为我不知道我该怎么做。。。
感谢

要启动sms活动,您只需要以下内容:

Intent sendIntent = new Intent(Intent.ACTION_VIEW);         
sendIntent.setData(Uri.parse("sms:"));
您可以添加额外的内容来填充您自己的消息,例如

sendIntent.putExtra("sms_body", x); 
然后开始有目的的触觉

startActivity(sendIntent);
这就是您所需要的。

使用

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");
我使用:


以下代码将打开预先填充电话号码的SMS活动,以便 必须发送的短信这在emulator和设备上都可以正常工作

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);

如果您想从其他活动启动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\u正文
smsto:
是在sms撰写活动中识别文本和电话号码的关键,因此请注意此处

这是我的工作

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);
短信目的:

Intent intent = new Intent("android.intent.action.VIEW");
        /** creates an sms uri */
        Uri data = Uri.parse("sms:");
        intent.setData(data);

如果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);
      }
   }
撰写短信:

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);
试试看{
意向SMSINT=新意向(意向.行动\视图);
setData(Uri.parse(“smsto:+Uri.encode(number));
SMSINT.PUTTERA(“地址”,编号);
smsinent.putExtra(“短信正文”,信息);
PackageManager pm=activity.getPackageManager();
List resInfo=pm.querytentActivities(smsinent,0);
对于(int i=0;i

最好的方法。

以下代码在android 6.0上运行。
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);
它将在默认消息传递应用程序中打开搜索活动,并提供与特定字符串相关的对话

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);  
您可以带着意图启动搜索活动。这将打开默认消息传递应用程序的搜索活动。 现在,要在搜索活动中显示特定对话的列表,您可以将搜索字符串作为string extra提供,键为

“意图\额外\数据\密钥”

如该类的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;
您还可以将sms的发件人地址作为字符串extra传递,该字符串将列出与该特定发件人地址的所有对话

查看更多信息


您还可以检查默认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);

您可以打开默认短信应用程序并按如下方式传递详细信息:
注意:如果要发送多个数字,请在字符串中用“;”分隔每个数字

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); 
}

在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的修改答案,您可以使用它,两者都可以在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_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_正文键

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+shopkepperDataModel.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(smsIntent);


我试过了,但是当我完全按照您给出的编写时,eclipse控制台返回(编译时)“找不到启动程序活动!”好的,您的清单中的意图过滤器中是否有具有以下属性的活动?事实上,启动来自appwidgetactivity。也许是从这里传来的,我把你所做的都写在清单上了,什么也没发生。。。我用另一个功能测试了我的按钮,这一个不想去!!要在“收件人”框中自动包含电话号码,请将代码的setData行更改为
sendIntent.setData(Uri.parse(“sms:+phoneNumber”)(感谢jqpubliq和jaydeepw)我需要检查SMS是否已发送,当用户将通过Intent ti SMS从我的应用程序发送SMS时,我如何才能做到这一点?我如何才能将图片附加到此消息?我有一个关于这一点的问题,如果我们看到框架代码,setType()将数据设置为null,setData()将类型设置为null。那么,在这种情况下,该类型将如何保持?我们如何更改SMST中文本的字体这对我来说适用于stock应用程序,例如在emulator上,但它可能在Galaxy S3上不起作用。@g.Lombard Lombard是的,此代码在S3上不起作用。s3?代码的任何解决方案都在安卓4.2.2上运行,它会打开sms的列表视图。这就是我需要的!!!最好的解决方案!谢谢请注意,这将不适用于android 4.4,并且可能会升级。。。“vnd.android dir/mms sms”不再受支持,只是在安卓4.4.2上进行了测试,并且可以正常工作。你能把我和那个公告联系起来吗@MaxChIf如果电话号码没有像我的情况那样添加,只需添加:
intent.setData(Uri.parse(“smsto:+phoneNumber”)
android.content.ActivityNotFoundException:找不到处理Intent的活动{act=android.Intent.action.VIEW typ=vnd.android-dir/mms-sms(有附加功能)}
我正在使用KitKat版本。我想在“收件人”字段中设置收件人号码。我该怎么设置呢?@KarthikeyanVe你能试试吗?Intent sendIntent=新的Intent(Intent.ACTION\u SENDTO);setData(Uri.parse(“smsto:phonenumber”);我试过了。工作正常。但是,当我单击消息应用程序中的后退按钮时,它也会关闭我的应用程序。如果我从短信应用程序中按back键,它将返回到我离开的应用程序。回答得很好。如果你想直接进入默认的短信应用程序,请使用,效果很好。如果您想让选择器在此处查看其他答案。当我从messageCheckout返回时,为什么应用程序关闭您可以通过SMS appFor SDK\u INT>=19(此api可用)共享它的工作原理。事实上,如果你想打开包含消息列表的短信应用,这是我的Nexus 6和牛轧糖中唯一有效的解决方案
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); 
}
/**
 * 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)
    }
}
    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);
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);
Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+shopkepperDataModel.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(smsIntent);