lancer une application sms avec une intention

144

J'ai une question sur une intention ... J'essaye de lancer l'application SMS ...

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

alors, vous pouvez voir que j'ai mis trop de choses dans mon intention, mais c'est parce que je ne sais pas comment je peux faire ... Merci

Olivier69
la source
1
Checkout gist.github.com/gelldur/9c199654c91b13478979 Vous pouvez partager par application SMS
Dawid Drozd

Réponses:

238

Pour commencer à lancer l'activité SMS, tout ce dont vous avez besoin est ceci:

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

Vous pouvez ajouter des extras pour remplir votre propre message, etc.

sendIntent.putExtra("sms_body", x); 

puis simplement startActivity avec l'intention.

startActivity(sendIntent);
jqpubliq
la source
J'ai essayé, mais quand j'écris exactement ce que vous donnez, la console eclipse retourne (lors de la compilation) "Aucune activité de Launcher trouvée!"
Olivier69
OK, avez-vous une activité avec les attributs suivants dans son filtre d'intention dans votre manifeste? <action android: name = "android.intent.action.MAIN" /> <category android: name = "android.intent.category.LAUNCHER" />
jqpubliq
en fait, le lancement provient d'une activité appwidget. Peut-être que ça vient d'ici, j'ai mis ce que tu as fait dans le manifeste et rien ne se passe ... J'ai testé mon bouton avec une autre fonction et celle-ci ne veut pas y aller !!
Olivier69
22
pour inclure automatiquement le numéro de téléphone dans la zone `` à '', remplacez la ligne de code setData par sendIntent.setData(Uri.parse("sms:" + phoneNumber));(merci jqpubliq et jaydeepw)
tmr
2
J'ai besoin de vérifier que les SMS sont envoyés ou non lorsque l'utilisateur enverra des SMS depuis mon application via Intent ti sms comment puis-je faire cela?
utilisateur
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);
Pratik Sharma
la source
4
La meilleure solution! Merci!
Nick
20
Attention, cela ne fonctionnera pas pour Android 4.4 et probablement plus ... "vnd.android-dir / mms-sms" n'est plus pris en charge
Max Ch
2
Je viens de tester sur Android 4.4.2 et cela fonctionne. Pouvez-vous me relier à cette annonce? @MaxCh
theknut
3
Si le numéro de téléphone n'est pas ajouté comme dans mon cas, il suffit d'ajouter: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

Si la version Android est Kitkat ou supérieur, les utilisateurs peuvent modifier l'application SMS par défaut. Cette méthode obtiendra l'application SMS par défaut et lancera l'application SMS par défaut.

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);
      }
   }
développeur_android
la source
2
J'utilise la version KitKat. Je souhaite définir le numéro du récepteur dans le champ À. Comment puis-je définir cela?
Karthikeyan Ve
3
@KarthikeyanVe, pouvez-vous essayer? Intent sendIntent = new Intent (Intent.ACTION_SENDTO); sendIntent.setData (Uri.parse ("smsto: numéro de téléphone"));
android_developer
J'ai essayé. Son fonctionne bien. Mais lorsque je clique sur le bouton de retour de l'application de messagerie, cela ferme également mon application. Si je recule depuis l'application de messagerie, elle doit revenir à mon application là où j'ai laissé.
Karthikeyan Ve
2
Très bonne réponse. À utiliser si vous souhaitez accéder directement à l'application SMS par défaut, fonctionne comme un charme. Si vous voulez choisir, voir d'autres réponses ici.
Nemanja Kovacevic
1
pourquoi l'application se ferme quand je reviens du message
Muhammad Younas
31
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

C'est tout ce dont vous avez besoin.

skyisle
la source
le code fonctionne sur Android 4.2.2, il ouvre la vue de liste pour les sms. c'est ce dont j'ai besoin !!!
VISHAL VIRADIA
22

Si vous souhaitez lancer une activité de composition de SMS à partir de certaines de vos autres activités et que vous devez également transmettre un numéro de téléphone et un SMS, utilisez ce 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); 

Remarque: ici les touches sms_bodyet smsto:is pour reconnaître le texte et le numéro de téléphone lors de l'activité de rédaction de SMS, soyez donc prudent ici.

Pir Fahim Shah
la source
L'application est fermée lorsqu'elle démarre l'intention de message ou lorsque
j'appuie
Tout d'abord, dites-moi quand vous exécutez ce code, puis ouvre-t-il la fonction d'écriture de sms, si l'application se ferme après avoir appuyé sur le bouton de retour, il y aurait un problème dans votre code, en particulier dans la fonction publique void BackPressed () {} comme celle-ci
Pir Fahim Shah
Je n'ai pas écrasé BackPresed Functionn
Muhammad Younas
17

Voici le code qui ouvrira l'activité SMS pré-renseigné avec le numéro de téléphone auquel le SMS doit être envoyé. Cela fonctionne bien sur l'émulateur ainsi que sur l'appareil .

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);
JaydeepW
la source
1
comment puis-je joindre une image à ce message?
unresolved_external
J'ai une question à ce sujet, si nous voyons le code du framework, setType () rend les données nulles et setData () rend le type nul. Alors, comment le type persiste-t-il dans ce cas?
AndroidGuy
comment pouvons-nous changer la police du texte dans le sms
jyomin
5

Utilisation

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");
Harinder
la source
1
Cela fonctionne pour moi avec l'application stock, par exemple sur l'émulateur, mais cela ne fonctionne probablement pas sur Galaxy S3 par exemple.
G. Lombard
1
@ G.Lombard Lombard Oui, ce code ne fonctionne pas sur s3. une solution pour s3?
Vivek Kumar Srivastava
4

J'utilise:

Intent sendIntent = new Intent(Intent.ACTION_MAIN);
sendIntent.putExtra("sms_body", "text");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);
Delgado
la source
4
Intent eventIntentMessage =getPackageManager()
 .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(getApplicationContext));
startActivity(eventIntentMessage);
Vinayak V Naik
la source
Pour SDK_INT> = 19 (où cette api est disponible) cela fonctionne. En fait, c'est la seule solution de travail dans mon Nexus 6 avec Nougat si vous souhaitez ouvrir une application SMS avec une liste de messages
lujop
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
}

Meilleure façon de faire cela.

BuffMcBigÉnorme
la source
Seul ce code fonctionne pour moi ... Cependant, comment éviter la sélection de plusieurs applications SMS ... seule la valeur par défaut démarre ..
Mahbubur Rahman Khan
3

Vous pouvez ouvrir l'application SMS par défaut et transmettre les détails comme ci-dessous:
Remarque: Si vous souhaitez envoyer à plusieurs numéros, séparez chaque numéro par ";" à l'intérieur de la chaîne

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

| Ou | Utilisez cette fonction:

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); 
}
Sujay UN
la source
Cela montre deux options, 1. hangout et 2. application de messagerie par défaut. Je souhaite ouvrir de force l'application de messagerie Android. Comment pouvons-nous archiver cela?
Milind Mevada
3

Dans kotlin, cela peut être implémenté facilement comme suit:

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

Ceci est la réponse modifiée de @mustafasevgi

Nux
la source
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);
Reetpreet Brar
la source
2

Le meilleur code qui fonctionne avec l'application SMS par défaut est.

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);
Junaid Khan
la source
1

Le code ci-dessous fonctionne sur Android 6.0.
Il ouvrira l'activité de recherche dans l'application de messagerie par défaut avec les conversations liées à la chaîne spécifique fournie.

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

Vous pouvez démarrer l'activité de recherche avec une intention. Cela ouvrira l'activité de recherche de l'application de messagerie par défaut. Maintenant, pour afficher une liste de conversations spécifiques dans l'activité de recherche, vous pouvez fournir la chaîne de recherche sous forme de chaîne supplémentaire avec la clé comme

"intent_extra_data_key"

comme le montre le onCreate de cette classe

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;

Vous pouvez également passer le SENDER_ADDRESS du sms en tant que chaîne supplémentaire, qui listera toutes les conversations avec cette adresse d'expéditeur spécifique.

Consultez com.android.mms.ui.SearchActivity pour plus d'informations

Vous pouvez également vérifier cette réponse

sissyphe_69
la source
0

sur l'émulateur ce travail pour moi

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

la source
0

Intention SMS:

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

Rédiger un SMS:

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

la source
0

Soit vous pouvez l'utiliser, les deux fonctionnent correctement sur Android au-dessus de 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);

ou

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

Vous pouvez utiliser l'extrait de code suivant pour atteindre votre objectif:

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

Si vous ne voulez pas de texte, supprimez la clé sms_body.

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse("smsto:"+shopkepperDataModel.getPhoneNo().trim()));
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(smsIntent);
Vishv Shroff
la source