web-dev-qa-db-fra.com

lancer l'application sms avec une intention

J'ai une question à propos d'une intention ... J'essaie 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 mes intentions, mais c’est parce que je ne sais pas comment je peux faire ... Merci

136
Olivier69

Pour lancer l'activité SMS, il vous suffit de:

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

Vous pouvez ajouter des extras pour renseigner votre propre message, par exemple

sendIntent.putExtra("sms_body", x); 

il suffit ensuite de démarrer l'activité avec l'intention.

startActivity(sendIntent);
230
jqpubliq
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);
137
Pratik Sharma

Si Android est KitKat ou une version ultérieure, les utilisateurs peuvent modifier l'application SMS par défaut. Cette méthode permet d'obtenir l'application SMS par défaut et de démarrer 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);
      }
   }
45
mustafasevgi
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.

31
skyisle

Si vous souhaitez lancer SMS Composer une activité d'une autre activité et vous devez également transmettre un numéro de téléphone et SMS texte, 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); 

Note: ici le sms_body et smsto: est la clé pour reconnaître le texte et le numéro de téléphone à SMS composer une activité, soyez donc prudent ici.

21
Pir Fahim Shah

Voici le code qui ouvrira l’activité SMS pré-renseignée avec le numéro de téléphone auquel le SMS doit être envoyé.). Cela fonctionne bien sur l’émulateur ainsi que sur le périphérique.

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

Utilisation

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.Android.mms", "com.Android.mms.ui.ConversationList");
5
Harinder
Intent eventIntentMessage =getPackageManager()
 .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(getApplicationContext));
startActivity(eventIntentMessage);
4
Vinayak V Naik

J'utilise:

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

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 nombre par ";" ficelle intérieure

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); 
}
3
Sujay U N
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
Reetpreet Brar
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
}

Le meilleur moyen de le faire.

2
BuffMcBigHuge

Le meilleur code qui fonctionne avec Default SMS app 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);
2
Junaid Khan

Le code ci-dessous fonctionne sur Android 6.0.
Cela ouvrira l'activité de recherche dans l'application de messagerie par défaut avec les conversations liées à une 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é suivante:

"intent_extra_data_key"

comme le montre 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 transmettre le SENDER_ADDRESS du sms en tant que chaîne supplémentaire, qui répertoriera toutes les conversations avec cette adresse d'expéditeur spécifique.

Vérifiez com.Android.mms.ui.SearchActivity pour plus d'informations

Vous pouvez également vérifier cette réponse

1
godslayer_69

Sms Intent:

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

sur é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);
0
user665270

Composer 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);
0
user3150090

Dans kotlin cela peut être facilement implémenté 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

0
Nux