Posso intercettare sms, vedere il telefono del mittente, il corpo, posso interrompereBroadcast se non mi piace questo sms, ma non so come segnare questo sms come leggi, quell'utente può leggere nella casella dopo. Qualche idea su come posso fare questo?Android: come contrassegnare gli sms come letti onRicevere
risposta
Questo potrebbe aiutare:
private void markMessageRead(Context context, String number, String body) {
Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
try{
while (cursor.moveToNext()) {
if ((cursor.getString(cursor.getColumnIndex("address")).equals(number)) && (cursor.getInt(cursor.getColumnIndex("read")) == 0)) {
if (cursor.getString(cursor.getColumnIndex("body")).startsWith(body)) {
String SmsMessageId = cursor.getString(cursor.getColumnIndex("_id"));
ContentValues values = new ContentValues();
values.put("read", true);
context.getContentResolver().update(Uri.parse("content://sms/inbox"), values, "_id=" + SmsMessageId, null);
return;
}
}
}
}catch(Exception e)
{
Log.e("Mark Read", "Error in Read: "+e.toString());
}
}
Non credo che ci sia alcun supporto ufficiale per questo, ma questa domanda fornisce un metodo di farlo (non hanno provato però): Mark MMS as read programmatically
idea sbagliata, sms che prendo in OnReceive non è in "tenore: // SMS" –
@ Andrew-Dovrebbe essere: contenuti "content // sms/casella di posta" .. –
Una risposta è stata data qui: Set sms as read in Android
ContentValues values = new ContentValues();
values.put("read",true);
getContentResolver().update(Uri.parse("content://sms/inbox"),values,
"_id="+SmsMessageId, null);
dove "_id" è l'ID del messaggio
cura, grazie NilayOnAndroid!
Dovrebbe essere" : // sms/inbox ".. –
Dal Android 4.4 KitKat l'unica applicazione in grado di modificare i dati sms - SMS-app che è stata impostata come predefinita
solo l'applicazione che riceve la trasmissione SMS_DELIVER_ACTION (l'app SMS predefinita specificata dall'utente) è in grado di scrivere sul provider SMS definito da android.provider.Telografia classe e sottoclassi
Maggiori informazioni possono essere trovate qui: http://android-developers.blogspot.ru/2013/10/getting-your-sms-apps-ready-for-kitkat.html
ho fatto un workarround versioni più recenti che KitKat, dalla risposta here: se ci sono messaggi da leggere, quando l'utente lascia l'applicazione, avviare applicazione SMS con il numero per il quale voglio messaggi per contrassegnare la lettura. Questo segnerà automaticamente tutti i messaggi come letti.
@Override
public void onBackPressed() {
if (toBeRead) {
Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address", smsNumber);
//smsIntent.putExtra("sms_body","Body of Message");
startActivity(smsIntent);
toBeRead = false;
}
}
È tutto letto msg nella casella o in un particolare – Prasad
No, solo un messaggio particolare con _id = SmsMessageId –
Il risultato di ritorno della query di aggiornamento è 0. Qual è la ragione di questo? –