79 votes

Envoyer un SMS via l'intention

Je veux envoyer un SMS via l'intention, mais lorsque j'utilise ce code, il me redirige vers un mauvais contact :

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

Pourquoi ?

De plus, je connais un moyen de suivre l'envoi de SMS, mais je ne sais pas comment le coder :

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

où XXXXXXXXXXXX est le numéro de téléphone.

0 votes

Essayez de lire le code source d'Android, également SmsManager.

1 votes

On peut également obtenir ActivityNotFoundException: No Activity found to handle Intent ("vnd.android-dir/mms-sms") . Il est préférable de ne pas utiliser cette méthode.

95voto

Prem Points 1524

J'ai développé cette fonctionnalité à partir d'un Blog. Il y a 2 façons d'envoyer des SMS.

  1. Compositeur SMS natif ouvert
  2. rédiger votre message et l'envoyer depuis votre application Android

C'est le code de la 1ère méthode.

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>

Activité

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

NOTE:- Dans cette méthode, vous n'avez pas besoin de l'autorisation SEND_SMS dans le fichier AndroidManifest.xml.

Pour la deuxième méthode, voir ceci BLOG . Vous trouverez une bonne explication ici.

J'espère que cela vous aidera...

59voto

Bao Le Points 1468
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);

2 votes

Cela ne fonctionne pas sur Android 4.0.3 (et mieux ?). Je dois utiliser Intent.EXTRA_TEXT à la place. Savez-vous pourquoi ?

1 votes

Je viens de le tester sur deux appareils fonctionnant sous Android 6.0.1 et 4.4.4 : dans tous les cas, les résultats sont les suivants "sms_body" a bien fonctionné, Intent.EXTRA_TEXT n'a pas fonctionné.

35voto

Shan Xeeshi Points 86

Créez l'intention comme ceci :

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

0 votes

Oui ! Merci :) Cela m'a aidé.

0 votes

Merci. C'est ce que je cherchais.

1 votes

Attention c'est 2021, cela ne fonctionne plus il ne montre pas le fournisseur de SMS par défaut dans la sélection "Ouvrir avec". En particulier, l'application "Messages" par défaut de Google n'apparaît pas dans la sélection.

6voto

Vipul Shah Points 13233

Essayez ce code. Il fonctionnera

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

J'espère que cela vous aidera.

0 votes

Il semble y avoir un problème. Je reçois un avertissement indiquant que la définition du type écrasera l'URI défini.

0 votes

2021, cela ne fonctionne plus il n'affiche pas le fournisseur de SMS par défaut dans la sélection "Ouvrir avec". En particulier, l'application "Messages" par défaut de Google n'apparaît pas dans la sélection.

4voto

theeman05 Points 41

Si vous voulez un certain message, utilisez ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X