Sto provando a creare un'app per Android che scrive messaggi nella casella di posta inviata del sistema. Questi messaggi non devono essere inviati tramite la rete GSM al destinatario, l'idea è solo di scriverli nel provider di contenuti inviati.Android KitKat (API 19) - Come scrivere messaggi nel provider di contenuti SMS, senza inviarli, dall'app non predefinita?
Per ora, ho questo codice:
File manifesto
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
Java Class
private final String SENT_SMS_CONTENT_PROVIDER_URI_OLDER_API_19 = "content://sms/sent";
ContentValues values = new ContentValues();
values.put("address", mNumber);
values.put("body", mMessage);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
mContext.getContentResolver().insert(Telephony.Sms.Sent.CONTENT_URI, values);
else mContext.getContentResolver().insert(Uri.parse(SENT_SMS_CONTENT_PROVIDER_URI_OLDER_API_19), values);
Per un dispositivo con una versione API inferiore a 19, questo l'implementazione funziona bene. Per queste versioni precedenti di sdk, è necessario solo accedere al fornitore di contenuti definito dal contenuto uri : // sms/inviato.
Per le versioni di sdk più recenti, questo non funziona. Apparentemente, Android ha cambiato il suo modo di gestire il modulo SMS nella versione KitKat. Secondo il prossimo articolo, solo l'applicazione SMS predefinita può scrivere e aggiornare il nuovo Content Provider SMS (android.provider.Telephony.Sms.Sent - il contenuto precedente: // sms/inviato non è disponibile):
Considerando il comportamento di questa app, non ha senso trasformarla nell'app SMS predefinita. Questa app non ha bisogno di leggere messaggi SMS dal fornitore di contenuti e non dovrebbe inviare alcun messaggio da SmsManager.getDefault(). SendTextMessage. L'unica cosa che dovrebbe fare è scrivere alcuni messaggi nel provider di posta.
Come si può capire, non è accettabile e praticabile richiedere all'utente di modificare l'app predefinita da estrarre e quindi tornare alla precedente app di SMS, ogni volta che è necessario scrivere un messaggio nella Posta inviata (questo è suggerito nella sezione "Consigli per il backup degli SMS & ripristini" nel Blogspot degli sviluppatori Android).
Il prossimo articolo rivela alcuni modi per visualizzarla OP_WRITE_SMS opzione:
Purtroppo, il codice successivo smesso di lavorare per Android 4.4.2:
Intent intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings.Settings");
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.putExtra(":android:show_fragment", "com.android.settings.applications.AppOpsSummary");
startActivity(intent);
I Sono fuori di soluzioni per superare questo problema.
La cartella inviata non dovrebbe riflettere solo i messaggi inviati (o almeno tentati) e non "falsi" che non lo sono stati? –