Senden Sie eine SMS per Absicht

75

Ich möchte eine SMS absichtlich senden, aber wenn ich diesen Code verwende, werde ich zu einem falschen Kontakt weitergeleitet:

Intent intentt = new Intent(Intent.ACTION_VIEW);         
intentt.setData(Uri.parse("sms:"));
intentt.setType("vnd.android-dir/mms-sms");
intentt.putExtra(Intent.EXTRA_TEXT, "");
intentt.putExtra("address",  phone number);
context.startActivity(intentt);

Warum?

Ich kenne auch eine Möglichkeit, das Senden von SMS zu verfolgen, aber ich weiß nicht, wie dies codiert wird:

Starting activity: Intent { 
   act=android.intent.action.SENDTO dat=smsto:%2B**XXXXXXXXXXXX** flg=0x14000000    
   cmp=com.android.mms/.ui.ComposeMessageActivity }

Dabei ist XXXXXXXXXXXX die Telefonnummer.

An einer
quelle
Versuchen Sie, den Android-Quellcode zu lesen, auch SmsManager.
JoxTraex
1
Man kann auch bekommen ActivityNotFoundException: No Activity found to handle Intent ("vnd.android-dir/mms-sms"). Verwenden Sie diese Methode besser nicht.
Uniruddh

Antworten:

88

Ich habe diese Funktionalität aus einem Blog entwickelt. Es gibt zwei Möglichkeiten, wie Sie SMS senden können.

  1. Öffnen Sie den nativen SMS-Composer
  2. Schreiben Sie Ihre Nachricht und senden Sie sie von Ihrer Android-Anwendung aus

Dies ist der Code der 1. Methode.

Main.xml

<?xml version="1.0" encoding="utf-8"?>  
    <RelativeLayout  
        android:id="@+id/relativeLayout1"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        xmlns:android="http://schemas.android.com/apk/res/android">  

            <Button  
                android:id="@+id/btnSendSMS"  
               android:layout_height="wrap_content"  
               android:layout_width="wrap_content"  
               android:text="Send SMS"  
               android:layout_centerInParent="true"  
               android:onClick="sendSMS">  
           </Button>  
   </RelativeLayout>

Aktivität

public class SendSMSActivity extends Activity {  
     /** Called when the activity is first created. */  
     @Override  
     public void onCreate(Bundle savedInstanceState) {  
         super.onCreate(savedInstanceState);  
         setContentView(R.layout.main);  
      }  

     public void sendSMS(View v)  
     {  
         String number = "12346556";  // The number on which you want to send SMS  
         startActivity(new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", number, null)));  
     }  
    /* or 
     public void sendSMS(View v) 
      { 
     Uri uri = Uri.parse("smsto:12346556"); 
         Intent it = new Intent(Intent.ACTION_SENDTO, uri); 
         it.putExtra("sms_body", "Here you can set the SMS text to be sent"); 
         startActivity(it); 
      } */  
 }

HINWEIS: - Bei dieser Methode benötigen Sie keine SEND_SMS-Berechtigung in der Datei AndroidManifest.xml.

Die zweite Methode finden Sie in diesem BLOG . Hier finden Sie eine gute Erklärung.

Hoffe das wird dir helfen ...

Prem
quelle
3
Eine weitere Sache, zu Testzwecken dieser App können Sie 2 Emulatoren öffnen; Sie haben ID wie 5554 & 5555 oder so ähnlich. Sie verwenden dies als Nummer und testen es.
Prem
Dies ist die einzige Möglichkeit, SMS absichtlich von allen Geräten und Android-Versionen zu senden.
Uniruddh
@ I-Droide: Auf welche Methode beziehen Sie sich?
Marco Altran
@ MarcoAltran:sendSMS(View v)
uniruddh
@Prem Es ist am besten, Inhalte aus Ihrer Quelle aufzunehmen und dann einfach einen Verweis darauf hinzuzufügen. Links können früher oder später unterbrochen werden und dann enthält Ihre Antwort plötzlich keine ausreichenden Informationen mehr
Farzan
54
Uri uri = Uri.parse("smsto:YOUR_SMS_NUMBER");   
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);   
intent.putExtra("sms_body", "The SMS text");   
startActivity(intent);  
Bao Le
quelle
2
Dies funktioniert nicht unter Android 4.0.3 (und besser?). Ich muss stattdessen Intent.EXTRA_TEXT verwenden. Irgendeine Idee warum?
Wojciii
1
Ich habe dies gerade auf einigen Geräten getestet, auf denen Android 6.0.1 und 4.4.4 ausgeführt werden: In allen Fällen hat es gut "sms_body"funktioniert, Intent.EXTRA_TEXThat nicht funktioniert.
Jonik
34

Erstellen Sie die Absicht wie folgt:

Intent smsIntent = new Intent(android.content.Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address","your desired phoneNumber");         
smsIntent.putExtra("sms_body","your desired message");
smsIntent.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(smsIntent);
Shan Xeeshi
quelle
Ja! Danke :) Es hat mir geholfen.
1111161171159459134
Vielen Dank. das war es, wonach ich gesucht habe
Sam
6

Versuchen Sie diesen Code. Es wird klappen

Uri smsUri = Uri.parse("tel:123456");
Intent intent = new Intent(Intent.ACTION_VIEW, smsUri);
intent.putExtra("sms_body", "sms text");
intent.setType("vnd.android-dir/mms-sms"); 
startActivity(intent);

Hoffe das wird dir helfen.

Vipul
quelle
Es scheint etwas nicht zu stimmen. Ich bekomme die Warnung, dass das Setzen des Typs den eingestellten URI überschreibt
Janusz
3

Wenn Sie eine bestimmte Nachricht wünschen, verwenden Sie diese:

String phoneNo = "";//The phone number you want to text
String sms= "";//The message you want to text to the phone

Intent smsIntent = new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", phoneNo, null));
smsIntent.putExtra("sms_body",sms);
startActivity(smsIntent);
theeman05
quelle
1

Hoffe das ist Arbeit, das funktioniert in meiner App

SmsManager.getDefault().sendTextMessage("Phone Number", null, "Message", null, null);
Dwivedi Ji
quelle
1
Benötigt dieser Weg eine spezielle Erlaubnis?
Radon8472
Aus der Dokumentation: Für diese Methode muss Ihre App über die Berechtigung SEND_SMS verfügen.
Shkschneider
Dies funktioniert auch nur, wenn die Nachricht maximal 160 Zeichen lang ist. Wenn es mehr als 160 ist, müssen Sie sendMultipartTextMessageanstelle vonsendTextMessage
Randy
1
Diese Methode erfordert leider die Berechtigung zum Senden von SMS und wird nicht akzeptiert. Google erlaubt das Veröffentlichen der App nur, wenn es sich um eine Kern-SMS-App handelt. Das bedeutet, dass die Hauptfunktionalität Ihrer App der SMS-Messenger sein muss. Es gibt nur wenige Ausnahmen. Die meisten Apps werden jedoch nicht genehmigt und beim Rollout abgelehnt.
MG Developer
1
/**
 * Intent to Send SMS
 * 
 *
 * Extras:
 *
 * "subject"
 *      A string for the message subject (usually for MMS only).
 * "sms_body"
 *      A string for the text message.
 *  EXTRA_STREAM
 *      A Uri pointing to the image or video to attach.
 *
 *  For More Info:
 *  https://developer.android.com/guide/components/intents-common#SendMessage
 *
 * @param phoneNumber on which SMS to send
 * @param message text Message to send with SMS
 */
public void startSMSIntent(String phoneNumber, String message) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    // This ensures only SMS apps respond
    intent.setData(Uri.parse("smsto:"+phoneNumber));
    intent.putExtra("sms_body", message);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
Dhaval Patel
quelle
1

Erstellen Sie die Absicht wie folgt:

   Uri uriSms = Uri.parse("smsto:1234567899");   
   Intent intentSMS = new Intent(Intent.ACTION_SENDTO, uriSms);   
   intentSMS.putExtra("sms_body", "The SMS text");   
   startActivity(intentSMS); 
Bhoomika
quelle
Woher kommt it.PutExtradas?
Nixon Kosgei
0
  1. Manifest Erlaubnis (Sie können es nach oder vor "Bewerbung" setzen)
 uses-permission android:name="android.permission.SEND_SMS"/>
  1. Machen Sie zum Beispiel eine Schaltfläche und schreiben Sie den folgenden Code (wie zuvor Premin diesem Thread geschrieben) und ersetzen Sie die folgende Telefonnummer durch eine tatsächliche Nummer. Es wird funktionieren:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", "phone_Number", null)));
Kerelos
quelle
Wir benötigen keine SEND_SMS-Berechtigung, um die SMS mit einer Absicht zu senden.
Swapnil
0

Füge Try-Catch hinzu, sonst stürzen Telefone ohne Sim ab.

void sentMessage(String msg) {
    try {
        Intent smsIntent = new Intent(Intent.ACTION_VIEW);
        smsIntent.setType("vnd.android-dir/mms-sms");
        smsIntent.putExtra("sms_body", msg);
        startActivity(smsIntent);
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(this, "No SIM Found", Toast.LENGTH_LONG).show();
    }
}
Shohan Ahmed Sijan
quelle
-1

Dies ist eine weitere Lösung mit SMSManager:

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("PhoneNumber-example:+989147375410", null, "SMS Message Body", null, null);
Hossein Amini
quelle
1
Diese Lösung wird nur noch akzeptiert, wenn es sich um eine zentrale SMS-Messenger-App handelt.
MG Developer