एक इरादे से लॉन्च एसएमएस अनुप्रयोग


144

मेरे पास एक इरादे के बारे में एक सवाल है ... मैं एसएमएस ऐप लॉन्च करने की कोशिश करता हूं ...

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

इसलिए, आप देख सकते हैं कि मैंने अपने इरादे में बहुत सारी चीजें रखी हैं, लेकिन ऐसा इसलिए है क्योंकि मुझे नहीं पता कि मैं कैसे कर सकता हूं ... धन्यवाद


1
चेकआउट gist.github.com/gelldur/9c199654c91b13478979 आप एसएमएस ऐप द्वारा साझा कर सकते हैं
Dawid Drozd

जवाबों:


238

एसएमएस गतिविधि शुरू करने के लिए आपको बस इसकी आवश्यकता है:

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

आप अपने स्वयं के संदेश और इस तरह से आबाद करने के लिए अतिरिक्त जोड़ सकते हैं

sendIntent.putExtra("sms_body", x); 

तो बस इरादे के साथ शुरुआत।

startActivity(sendIntent);

मैंने कोशिश की, लेकिन जब मैं ठीक-ठीक लिखता हूं कि आप क्या देते हैं, ग्रहण कंसोल रिटर्न (जब संकलन) "कोई लॉन्चर गतिविधि नहीं मिली!"
ओलिवियर 69

ठीक है, क्या आपके सामने अपने आशय के फिल्टर में निम्नलिखित विशेषताओं के साथ एक गतिविधि है? <क्रिया Android: name = "android.intent.action.MAIN" /> <श्रेणी Android: name = "android.intent.category.LAUNCHER" />
jqpubliq

वास्तव में, लॉन्च एक एपिविजेक्टिविटी से आता है। Perh'aps यह यहाँ से आता है, मैंने आपको प्रकट में क्या किया है और कुछ भी नहीं हुआ ... मैंने अपने बटन का परीक्षण एक अन्य फ़ंक्शन के साथ किया है और यह कोई भी नहीं जाना चाहता है !!
ओलिवियर 69

22
ऑटो में 'से' बॉक्स में फोन नंबर, कोड की sendIntent.setData(Uri.parse("sms:" + phoneNumber));सेटडेटा लाइन को बदलना (शुक्रिया jqpubliq और jaydeepw)
tmr

2
मुझे यह जांचने की आवश्यकता है कि एसएमएस भेजा गया है या नहीं जब उपयोगकर्ता मेरे ऐप से एसएमएस भेजेगा Intent ti sms के माध्यम से मैं यह कैसे कर सकता हूं?
उपयोगकर्ता

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

4
सबसे अच्छा समाधान! धन्यवाद!
निक

20
ज्ञात हो, यह एंड्रॉइड 4.4 के लिए काम नहीं करेगा और शायद ... "vnd.android-dir / mms-sms" अब समर्थित नहीं है
मैक्स च

2
बस एंड्रॉइड 4.4.2 पर परीक्षण किया गया और यह काम कर रहा है। क्या आप मुझे उस घोषणा से जोड़ सकते हैं? @MaxCh
aknut

3
यदि मेरे मामले में फोन नंबर नहीं जोड़ा गया है, तो बस जोड़ें:intent.setData(Uri.parse("smsto:" + phoneNumber));
यूटोपिया

4
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=vnd.android-dir/mms-sms (has extras) }
गुयेन मिन्ह

49

यदि Android संस्करण किटकैट या उससे ऊपर का है, तो उपयोगकर्ता डिफ़ॉल्ट एसएमएस एप्लिकेशन को बदल सकते हैं। इस तरीके से डिफॉल्ट एसएमएस ऐप मिलेगा और डिफॉल्ट एसएमएस ऐप शुरू होगा।

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

2
मैं किटकैट संस्करण का उपयोग कर रहा हूं। मैं To फ़ील्ड में रिसीवर नंबर सेट करना चाहता हूं। मैं इसे कैसे सेट कर सकता हूं?
कार्तिकेयन Ve

3
@ कार्तिकेयनवी कृपया आप कोशिश कर सकते हैं? आशय sendIntent = new Intent (Intent.ACTION_SENDTO); sendIntent.setData (Uri.parse ( "smsto: फ़ोननंबर"));
android_developer

मैंने कोशिश की। इसका काम ठीक है। लेकिन जब मैं मैसेज ऐप से बैक बटन पर क्लिक करता हूं, तो यह मेरा ऐप भी बंद कर देता है। यदि मैं वापस संदेश ऐप से दबाया जाता है, तो उसे मेरे ऐप पर वापस आ जाना चाहिए जहां मैंने छोड़ा था।
कार्तिकेयन वी

2
बहुत बढ़िया जवाब। यदि आप सीधे डिफ़ॉल्ट एसएमएस ऐप पर जाना चाहते हैं तो उपयोग करें, आकर्षण की तरह काम करता है। यदि आप चाहते हैं कि चयनकर्ता यहां अन्य उत्तर देखें।
नेमंजा कोवेसेविक

1
जब मैं संदेश से वापस आता हूं तो ऐप बंद क्यों होता है
मुहम्मद यूनास

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

बस इतना ही चाहिए।


कोड एंड्रॉइड 4.2.2 पर काम कर रहा है, यह एसएमएस के लिए सूची दृश्य खोलता है। मुझे इसी की जरूरत थी !!!
विसल भारत

22

यदि आप अपनी किसी अन्य गतिविधि से एसएमएस कंपोजिंग गतिविधि लॉन्च करना चाहते हैं और आपको फोन नंबर और एसएमएस पाठ भी पास करना है, तो इस कोड को देखें:

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_bodyऔर smsto:एसएमएस की रचना पर पाठ और फोन नं को पहचानने की कुंजी है, इसलिए यहाँ सावधान रहें।


ऐप बंद है जब यह संदेश का इरादा शुरू करता है या जब मैं वापस कुंजी दबाता हूं तो ऐप बंद हो जाता है
मुहम्मद यूनास

सबसे पहले मुझे बताएं कि जब आप इस कोड को निष्पादित करते हैं, तो क्या यह ओपन लिखने एसएमएस फ़ंक्शन करता है, यदि ऐप बैक बटन मारने के बाद बंद हो जाता है, तो आपके कोड में कुछ समस्या होगी, सार्वजनिक रूप से बैकपॉइड में () {} इस तरह से कार्य करें
Pir फहीम शाह

मैंने बैकप्रेसड फंक्शन को नहीं लिखा
मुहम्मद

17

यहां वह कोड है जो उस एसएमएस नंबर को प्री-पॉपुलेट करेगा जो उस फोन नंबर के साथ है, जिस पर एसएमएस भेजा जाना है। यह एमुलेटर के साथ-साथ डिवाइस पर भी ठीक काम करता है

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

1
मैं इस संदेश को चित्र कैसे संलग्न कर सकता हूं?
unresolved_external

मैं इस बारे में 1 प्रश्न hv करता हूं, अगर हम फ्रेमवर्क कोड देखते हैं, तो setType () डेटा को null & setData बनाता है () प्रकार को शून्य बनाता है। तो इस मामले में प्रकार कैसे जारी रहेगा?
AndroidGuy

हम एसएमएस में पाठ का फ़ॉन्ट कैसे बदल सकते हैं
jyomin

5

उपयोग

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

1
यह मेरे लिए शेयर ऐप के साथ काम करता है जैसे एमुलेटर पर, लेकिन यह शायद उदाहरण के लिए गैलेक्सी एस 3 पर काम नहीं करता है।
जी। लोम्बार्ड

1
@ G.Lombard लोम्बार्ड हाँ यह कोड s3 पर काम नहीं कर रहा है। S3 के लिए कोई समाधान?
विवेक कुमार श्रीवास्तव

4

मैं उपयोग करता हूं:

Intent sendIntent = new Intent(Intent.ACTION_MAIN);
sendIntent.putExtra("sms_body", "text");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);

4
Intent eventIntentMessage =getPackageManager()
 .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(getApplicationContext));
startActivity(eventIntentMessage);

SDK_INT> = 19 (जहां यह एपी उपलब्ध है) के लिए यह काम करता है। यदि आप संदेशों की सूची के साथ एसएमएस ऐप खोलना चाहते हैं तो वास्तव में
नूगाट के

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
}

इसे करने का सबसे अच्छा तरीका।


मेरे लिए केवल यह कोड काम करता है ... हालाँकि कई एसएमएस एप्लिकेशन के चयन से कैसे बचें ... केवल डिफ़ॉल्ट शुरू हो जाएगा ..
महबूबुर रहमान खान

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

यह दो विकल्प दिखाता है, 1. हैंगआउट और 2. डिफ़ॉल्ट संदेश ऐप। मैं जबरदस्ती Android संदेश ऐप खोलना चाहता हूं। हम इसे कैसे संग्रहित कर सकते हैं?
मिलिंद मेवाड़ा

3

कोटलिन में इसे इस प्रकार आसानी से लागू किया जा सकता है:

/**
 * 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 का संशोधित उत्तर है


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

2

डिफ़ॉल्ट एसएमएस ऐप के साथ काम करने वाला सबसे अच्छा कोड है।

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

1

नीचे दिया गया कोड एंड्रॉइड 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;

आप स्ट्रिंग के रूप में sms के SENDER_ADDRESS को भी पास कर सकते हैं, जो उस संपूर्ण प्रेषक पते के साथ सभी वार्तालापों को सूचीबद्ध करेगा।

अधिक जानकारी के लिए com.android.mms.ui.SearchActivity चेक करें

आप इस उत्तर को भी देख सकते हैं


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


0

एसएमएस लिखें:

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

0

या तो आप इसका उपयोग कर सकते हैं, दोनों 4.4 से ऊपर के एंड्रॉइड पर ठीक काम कर रहे हैं

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

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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.