启动短信应用程序的意图

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

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

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

要开始启动短信活动,所有你需要的是这样的:

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

你可以添加额外的东西来填充你自己的消息,像这样的

 sendIntent.putExtra("sms_body", x); 

然后只是意图的startActivity。

 startActivity(sendIntent); 
 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); 
 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setType("vnd.android-dir/mms-sms"); startActivity(intent); 

这就是你所需要的。

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

这里是打开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); 

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

 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_bodysms_body smsto:是识别短信撰写活动的文本和电话号码的键,所以在这里要小心。

使用

 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList"); 
 Intent eventIntentMessage =getPackageManager() .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(getApplicationContext)); startActivity(eventIntentMessage); 

我用:

 Intent sendIntent = new Intent(Intent.ACTION_MAIN); sendIntent.putExtra("sms_body", "text"); sendIntent.setType("vnd.android-dir/mms-sms"); startActivity(sendIntent); 
 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); 

您可以打开默认的短信应用程序,并传递细节如下:
注意:如果你想发送很多号码,用“;”分隔每个号码。 内部string

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

|和| 使用这个function:

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

在模拟器上这个工作对我来说

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

撰写短信:

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

这样做的最好方法。

下面的代码在Android 6.0上工作。
它将在默认消息应用程序中打开search活动,并提供与特定string相关的对话。

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

您可以以意向开始search活动。 这将打开默认消息应用程序的search活动。 现在,要显示search活动中特定对话的列表,可以使用键as将searchstring提供为额外string

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

您还可以将sms的SENDER_ADDRESS作为string额外传递,这将列出所有具有该特定发件人地址的会话。

查看com.android.mms.ui.SearchActivity获取更多信息

你也可以检查这个答案

与默认的短信应用程序的最佳代码是。

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