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 =?
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 .
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,
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 =