Cómo guardar SMS en la bandeja de entrada en android?
He escrito el siguiente código para enviar mensajes SMS.
SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(destAddr, null, mMessageText, il, null);
Pero esto no se está actualizando en mi Bandeja de entrada, necesito guardar el mismo mensaje en Bandeja de entrada, ¿O hay alguna forma de invocar una aplicación nativa de SMS para enviar SMS?
- ¿Cómo enviar un mensaje SMS en un dispositivo Android en segundo plano?
- SMS de confirmación no deseados enviados por el proveedor en Austria
- Recuperación de mensajes SMS desde Inbox
- ¿Cómo acceder a sms tiempo que he recibido en la bandeja de entrada?
- Registro de SMS como en la aplicación para móviles: whatsapp
- Obtener mensajes SMS desde la tarjeta SIM
- Desarrollo de la versión personalizada de la aplicación incorporada de SMS / MMS para Android
- SMS no recibidos ... sólo en ciertos casos ... Carrier / Country?
- Cómo enviar un SMS al emulador de un remitente que es una cadena
- Enviar SMS a través de la intención de múltiples números de teléfono
- Anular la aplicación predeterminada de mensajería de android
- Cómo recuperar la ubicación GPS a través de SMS
- IPhone o Android que utilizan la autenticación basada en SMS?
Puede utilizar el proveedor de contenido sms para leer y escribir mensajes SMS:
ContentValues values = new ContentValues(); values.put("address", "123456789"); values.put("body", "foo bar"); getContentResolver().insert(Uri.parse("content://sms/sent"), values);
No sé por qué querrías escribir un mensaje que envías a la bandeja de entrada, pero si eso es lo que quieres, simplemente cambia el uri anterior a "content://sms/inbox"
.
Alternativamente, puede entregar una aplicación de mensajería iniciando una actividad con una intención similar a la siguiente:
Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms://")); sendIntent.putExtra("address", "123456789"); sendIntent.putExtra("sms_body", "foo bar"); startActivity(sendIntent);
Editar: Sin embargo, el proveedor de contenido sms://
no forma parte del SDK, por lo que recomendamos encarecidamente no usar código como este en aplicaciones públicas por varias razones .
Si desea poner manualmente algunos SMS a su bandeja de entrada con un nombre de remitente,
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);
También añadir estos en manifiesto.
<uses-permission android:name="android.permission.READ_SMS"/> <uses-permission android:name="android.permission.WRITE_SMS"/>
Ahora este código agregará sms a la bandeja de entrada con un nombre de remitente definido, por lo que fácilmente puede manejar el problema con esta solución,
Este código funcionará para todas las versiones de Android incluyendo arriba kitkat (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; }
Como llamar
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"); } } } } }
Para obtener más detalles o una aplicación de ejemplo, sigue el enlace: http://wisdomitsol.com/blog/android/sms/how-to-programmatically-save-sms-to-inbox-or-sent-in-android
Intent sendIntent = new Intent(Intent.ACTION_VIEW); sendIntent.putExtra("sms_body", "Content of the SMS goes here..."); sendIntent.setType("vnd.android-dir/mms-sms"); startActivity(sendIntent);
Invocar una aplicación de SMS nativa con contenido
ContentValues values = new ContentValues(); values.put("address", phoneNumber); values.put("body", multimessage); values.put("read", 1); //"0" for have not read sms and "1" for have read sms Uri uri = Telephony.Sms.Sent.CONTENT_URI; Activity ctx = this.cordova.getActivity(); ctx.getContentResolver().insert(uri, values);