Starten Sie die SMS-Anwendung mit einer Absicht


144

Ich habe eine Frage zu einer Absicht ... Ich versuche die SMS-App zu starten ...

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

Sie können also sehen, dass ich zu viele Dinge in meine Absicht gesteckt habe, aber das liegt daran, dass ich nicht weiß, wie ich es machen kann ... Danke


1
Kasse gist.github.com/gelldur/9c199654c91b13478979 Sie können per SMS App teilen
Dawid Drozd

Antworten:


238

Um die SMS-Aktivität zu starten, benötigen Sie lediglich Folgendes:

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

Sie können Extras hinzufügen, um Ihre eigene Nachricht und dergleichen zu füllen

sendIntent.putExtra("sms_body", x); 

dann starten Sie einfachActivity mit der Absicht.

startActivity(sendIntent);

Ich habe es versucht, aber wenn ich genau das schreibe, was Sie geben, gibt die Eclipse-Konsole (beim Kompilieren) "Keine Launcher-Aktivität gefunden!" Zurück.
Olivier69

Okay, haben Sie eine Aktivität mit den folgenden Attributen in ihrem Absichtsfilter in Ihrem Manifest? <action android: name = "android.intent.action.MAIN" /> <category android: name = "android.intent.category.LAUNCHER" />
jqpubliq

Tatsächlich erfolgt der Start über eine Appwidgetaktivität. Vielleicht kommt es von hier, ich habe das, was du getan hast, in das Manifest eingetragen und nichts passiert ... Ich habe meinen Knopf mit einer anderen Funktion getestet und diese will nicht gehen !!
Olivier69

22
Um die Telefonnummer automatisch in das Feld 'bis' aufzunehmen, ändern sendIntent.setData(Uri.parse("sms:" + phoneNumber));Sie die Codezeile setData in (danke jqpubliq und jaydeepw)
tmr

2
Ich muss überprüfen, ob SMS gesendet werden oder nicht, wenn der Benutzer SMS von meiner App über Intent ti sms sendet. Wie kann ich das tun?
Benutzer

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
Die beste Lösung! Vielen Dank!
Nick

20
Beachten Sie, dass dies für Android 4.4 und wahrscheinlich auch nicht funktioniert ... "vnd.android-dir / mms-sms" wird nicht mehr unterstützt
Max Ch

2
Gerade auf Android 4.4.2 getestet und es funktioniert. Können Sie mich bitte mit dieser Ankündigung verknüpfen? @ MaxCh
Theknut

3
Wenn die Telefonnummer nicht wie in meinem Fall hinzugefügt wird, fügen Sie einfach hinzu:intent.setData(Uri.parse("smsto:" + phoneNumber));
Utopia

4
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=vnd.android-dir/mms-sms (has extras) }
Nguyen Minh Binh

49

Wenn die Android-Version Kitkat oder höher ist, können Benutzer die Standard-SMS-Anwendung ändern. Diese Methode ruft die Standard-SMS-App ab und startet die Standard-SMS-App.

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
Ich verwende die KitKat-Version. Ich möchte die Empfängernummer im Feld An einstellen. Wie kann ich das einstellen?
Karthikeyan Ve

3
@KarthikeyanVe bitte kannst du es versuchen? Intent sendIntent = new Intent (Intent.ACTION_SENDTO); sendIntent.setData (Uri.parse ("smsto: Telefonnummer"));
android_developer

Ich habe es versucht. Es funktioniert gut. Wenn ich in der Nachrichten-App auf die Schaltfläche "Zurück" klicke, wird auch meine App geschlossen. Wenn ich von der Nachrichten-App zurück gedrückt habe, sollte sie zu meiner App zurückkehren, in der ich sie verlassen habe.
Karthikeyan Ve

2
Gute Antwort. Verwenden Sie diese Option, wenn Sie direkt zur Standard-SMS-App wechseln möchten. Wenn Sie eine Auswahl wünschen, finden Sie hier andere Antworten.
Nemanja Kovacevic

1
Warum App schließen, wenn ich von der Nachricht
zurückkomme

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

Das ist alles was du brauchst.


Code funktioniert unter Android 4.2.2, es öffnet die Listenansicht für SMS. das ist was ich brauche !!!
VISHAL VIRADIA

22

Wenn Sie die SMS-Kompositionsaktivität von einigen Ihrer anderen Aktivitäten aus starten möchten und außerdem eine Telefonnummer und einen SMS-Text übergeben müssen, verwenden Sie diesen Code:

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

Hinweis: Hier ist das sms_bodyund smsto:die Taste zum Erkennen des Textes und der Telefonnummer bei der SMS-Erstellungsaktivität. Seien Sie hier also vorsichtig.


App ist geschlossen, wenn es Nachrichtenabsicht startet oder wenn ich die Zurück-Taste drücke App ist geschlossen
Muhammad Younas

Sagen Sie mir zunächst, wann Sie diesen Code ausführen, und öffnen Sie dann die Funktion zum Schreiben von SMS. Wenn die App nach dem Drücken der Zurück-Taste geschlossen wird, liegt ein Problem in Ihrem Code vor, insbesondere bei der öffentlichen Funktion "Zurückdrücken" () {} wie dieser
Pir Fahim Shah

Ich habe BackPresed Functionn
Muhammad Younas

17

Hier ist der Code, der die SMS-Aktivität öffnet, die mit der Telefonnummer gefüllt ist, an die die SMS gesendet werden muss. Dies funktioniert sowohl auf dem Emulator als auch auf dem Gerät einwandfrei .

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
Wie kann ich dieser Nachricht ein Bild hinzufügen?
ungelöste_externe

Ich habe eine Frage dazu: Wenn wir den Framework-Code sehen, macht setType () die Daten als null und setData () macht den Typ als null. Wie bleibt der Typ in diesem Fall bestehen?
AndroidGuy

Wie können wir die Schriftart des Textes in der SMS ändern
jyomin

5

Verwenden

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

1
Dies funktioniert bei mir mit der Standard-App, z. B. auf dem Emulator, aber wahrscheinlich nicht auf dem Galaxy S3.
G. Lombard

1
@ G.Lombard Lombard Ja, dieser Code funktioniert nicht mit s3. irgendeine lösung für s3?
Vivek Kumar Srivastava

4

Ich benutze:

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

Für SDK_INT> = 19 (wo diese API verfügbar ist) funktioniert es. In der Tat ist die einzige funktionierende Lösung in meinem Nexus 6 mit Nougat, wenn Sie
SMS-

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
}

Der beste Weg, dies zu tun.


Nur dieser Code funktioniert für mich ... Wie man jedoch die Auswahl mehrerer
SMS-Apps

3

Sie können die Standard-SMS-App öffnen und Details wie folgt übergeben:
Hinweis: Wenn Sie an viele Nummern senden möchten, trennen Sie jede Nummer mit ";" innerhalb der Zeichenfolge

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

| Oder | Verwenden Sie diese Funktion:

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

Dies zeigt zwei Optionen: 1. Hangout und 2. Standardnachrichten-App. Ich möchte die Android-Nachrichten-App zwangsweise öffnen. Wie können wir das archivieren?
Milind Mevada

3

In Kotlin kann dies einfach wie folgt implementiert werden:

/**
 * 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)
    }
}

Dies ist eine modifizierte Antwort von @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

Der beste Code, der mit der Standard-SMS-App funktioniert, ist.

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

Der folgende Code funktioniert unter Android 6.0.
Dadurch wird die Suchaktivität in der Standardnachrichtenanwendung mit den Konversationen geöffnet, die sich auf eine bestimmte bereitgestellte Zeichenfolge beziehen.

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

Sie können die Suchaktivität mit einer Absicht starten. Dadurch wird die Suchaktivität der Standardnachrichtenanwendung geöffnet. Um nun eine Liste bestimmter Konversationen in der Suchaktivität anzuzeigen, können Sie die Suchzeichenfolge als zusätzliche Zeichenfolge mit dem Schlüssel als angeben

"intent_extra_data_key"

wie im onCreate dieser Klasse gezeigt

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;

Sie können auch die SENDER_ADDRESS der SMS als zusätzliche Zeichenfolge übergeben, in der alle Konversationen mit dieser bestimmten Absenderadresse aufgelistet werden.

Überprüfen Sie com.android.mms.ui.SearchActivityWeitere Informationen finden

Sie können diese Antwort auch überprüfen


0

auf Emulator diese Arbeit für mich

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

SMS-Absicht:

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

0

SMS verfassen:

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

Entweder können Sie dies verwenden, beide funktionieren gut auf Android über 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);

oder

    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.putExtra("sms_body","Body of Message");
    smsIntent.setData(Uri.parse("sms:9212107320"));
    startActivity(smsIntent);

0

Sie können das folgende Codefragment verwenden, um Ihr Ziel zu erreichen:

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

Wenn Sie keinen Text möchten, entfernen Sie den Schlüssel sms_body.

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+shopkepperDataModel.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(smsIntent);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.