web-dev-qa-db-fra.com

Comment enregistrer SMS dans la boîte de réception dans Android?

J'ai écrit le code ci-dessous pour envoyer des messages SMS.

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(destAddr, null, mMessageText, il, null);

Mais cela ne se met pas à jour dans ma boîte de réception, je dois enregistrer le même message dans la boîte de réception, ou existe-t-il un moyen d'invoquer une application native SMS pour envoyer SMS =?

40
Senthil

Vous pouvez utiliser le fournisseur de contenu sms pour lire et écrire des messages sms:

ContentValues values = new ContentValues();
values.put("address", "123456789");
values.put("body", "foo bar");
getContentResolver().insert(Uri.parse("content://sms/sent"), values);

Je ne sais pas pourquoi vous souhaitez écrire un message que vous envoyez à la boîte de réception mais si c'est ce que vous voulez, changez simplement l'URI ci-dessus en "content://sms/inbox".

Vous pouvez également passer à une application de messagerie en démarrant une activité avec une intention similaire à la suivante:

Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms://"));
sendIntent.putExtra("address", "123456789");
sendIntent.putExtra("sms_body", "foo bar");
startActivity(sendIntent);

Modifier: Cependant, le sms:// le fournisseur de contenu ne fait pas partie du SDK, donc je recommande fortement pas d'utiliser du code comme celui-ci dans les applications publiques pour plusieurs raisons .

60
Josef Pfleger

Si vous souhaitez mettre manuellement certains SMS dans votre boîte de réception avec un nom d'expéditeur,

  ContentValues values = new ContentValues();
  values.put("address", "+923359110795");//sender name
  values.put("body", "this is my text");
  getContentResolver().insert(Uri.parse("content://sms/inbox"), values);

ajoutez-les également dans le manifeste.

 <uses-permission Android:name="Android.permission.READ_SMS"/>
 <uses-permission Android:name="Android.permission.WRITE_SMS"/>

Maintenant, ce code ajoutera des sms à la boîte de réception avec un nom d'expéditeur défini, afin que vous puissiez facilement gérer votre problème avec cette solution,

28
Pir Fahim Shah

Ce code fonctionnera pour toutes les versions Android y compris KitKat ci-dessus (19)

public boolean saveSms(String phoneNumber, String message, String readState, String time, String folderName) {
        boolean ret = false;
        try {
            ContentValues values = new ContentValues();
            values.put("address", phoneNumber);
            values.put("body", message);
            values.put("read", readState); //"0" for have not read sms and "1" for have read sms
            values.put("date", time);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
                Uri uri = Telephony.Sms.Sent.CONTENT_URI;
                if(folderName.equals("inbox")){
                    uri = Telephony.Sms.Inbox.CONTENT_URI;
                }
                mActivity.getContentResolver().insert(uri, values);
            }
            else {
                mActivity.getContentResolver().insert(Uri.parse("content://sms/" + folderName), values);
            }

            ret = true;
        } catch (Exception ex) {
            ex.printStackTrace();
            ret = false;
        }
        return ret;
    }

Comment appeler

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
        final String myPackageName = getPackageName();
        if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) {

            Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
            intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, myPackageName);
            startActivityForResult(intent, 1);
        }else {
            saveSms("111111", "mmmmssssggggg", "0", "", "inbox");
        }
    }else {
        saveSms("111111", "mmmmssssggggg", "0", "", "inbox");
    }

onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
                final String myPackageName = getPackageName();
                if (Telephony.Sms.getDefaultSmsPackage(mActivity).equals(myPackageName)) {

                    //Write to the default sms app
                    saveSms("111111", "mmmmssssggggg", "0", "", "inbox");
                }
            }
        }
    }
}

Pour plus de détails ou un exemple d'application, suivez le lien: http://wisdomitsol.com/blog/Android/sms/how-to-programmatically-save-sms-to-inbox-or-sent-in-Android =

8
Atif Mahmood