[英]Delete SMS in Android 1.5
有很多關於它的問題,在我的應用程序中沒有答案:(
我需要從接收器中刪除 SMS,即使用戶可以看到它,但必須以編程方式將其刪除。
我該怎么做?
我用過的最合適的是以下,但它不起作用:(
context.getContentResolver().delete(
deleteUri,
"address=? and date=?",
new String[] { msg.getOriginatingAddress(),
String.valueOf(msg.getTimestampMillis()) });
重構我的代碼后,我發現下一個解決方案有效:
private int deleteMessage(Context context, SmsMessage msg) {
Uri deleteUri = Uri.parse("content://sms");
int count = 0;
Cursor c = context.getContentResolver().query(deleteUri, null, null,
null, null);
while (c.moveToNext()) {
try {
// Delete the SMS
String pid = c.getString(0); // Get id;
String uri = "content://sms/" + pid;
count = context.getContentResolver().delete(Uri.parse(uri),
null, null);
} catch (Exception e) {
}
}
return count;
}
提醒:不推薦使用catch(Exception)
。
只需在廣播接收器中使用這個簡單的代碼。
try {
Uri uriSms = Uri.parse("content://sms/inbox");
Cursor c = context.getContentResolver().query(
uriSms,
new String[] { "_id", "thread_id", "address", "person",
"date", "body" }, "read=0", null, null);
if (c != null && c.moveToFirst()) {
do {
long id = c.getLong(0);
long threadId = c.getLong(1);
String address = c.getString(2);
String body = c.getString(5);
String date = c.getString(3);
if (message.equals(body) && address.equals(number)) {
// mLogger.logInfo("Deleting SMS with id: " + threadId);
context.getContentResolver().delete(
Uri.parse("content://sms/" + id), "date=?",
new String[] { <your date>});
Log.e("log>>>", "Delete success.........");
}
} while (c.moveToNext());
}
} catch (Exception e) {
Log.e("log>>>", e.toString());
}
deleteUri
的價值是什么?
您確定在您嘗試刪除 SMS之前已將其寫入本地存儲嗎? 如果您正在處理SMS_RECEIVED
廣播,則不能保證本機 SMS 應用程序已經處理了 SMS...
另外,我要指出的是,Android 並未公開記錄 SMS 內容提供程序 API,並且將來可能會發生變化。 但是,如果您只針對 Android 1.5(或當前設備),那么您可能沒問題。
這個鏈接可能有用
http://blog.chinaunix.net/u/9577/showart_1850111.html
我自己還沒有完全實現它,但我已經實現的工作
請注意,它沒有完全記錄在案,因此在未來的 Android 版本中可能會發生變化
編輯:
這是我自己實現代碼的方式:
String url = "content://sms/";
Uri uri = Uri.parse(url);
getContentResolver().registerContentObserver(uri, true, new MyContentObserver(handler));
Uri uriSms = Uri.parse("content://sms/inbox");
Cursor c = getContentResolver().query(uriSms, null,null,null,null);
Log.d("COUNT", "Inbox count : " + c.getCount());
}
class MyContentObserver extends ContentObserver {
public MyContentObserver(Handler handler) {
super(handler);
}
@Override public boolean deliverSelfNotifications() {
return false;
}
@Override public void onChange(boolean arg0) {
super.onChange(arg0);
Log.v("SMS", "Notification on SMS observer");
Message msg = new Message();
msg.obj = "xxxxxxxxxx";
handler.sendMessage(msg);
Uri uriSMSURI = Uri.parse("content://sms/");
Cursor cur = getContentResolver().query(uriSMSURI, null, null,
null, null);
cur.moveToNext();
String protocol = cur.getString(cur.getColumnIndex("protocol"));
if(protocol == null){
Log.d("SMS", "SMS SEND");
int threadId = cur.getInt(cur.getColumnIndex("thread_id"));
Log.d("SMS", "SMS SEND ID = " + threadId);
getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadId), null, null);
}
else{
Log.d("SMS", "SMS RECIEVE");
int threadIdIn = cur.getInt(cur.getColumnIndex("thread_id"));
getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null);
}
}
}
該代碼偵聽 SMS 內容提供程序中的更改。
如果您想刪除 SMS,這是您感興趣的行
getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null);
您必須刪除整個對話才能刪除短信,我無法僅刪除對話的最后一條消息
使用它並快樂的家伙
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.telephony.SmsMessage;
import android.widget.Toast;
import android.net.Uri;
public class SmsReceiver extends BroadcastReceiver {
private Handler mHandler = new Handler();
private SmsMessage[] msgs;
private Context con;
@Override
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
msgs = null;
String str = "";
if (bundle != null)
{
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
str += "SMS from " + msgs[i].getOriginatingAddress();
str += ":";
str += msgs[i].getMessageBody().toString();
str += "\n";
}
con = context;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
deleteSMS();
}
}, 5000);
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}
private void deleteSMS()
{
try
{
for (int i=0; i<msgs.length; i++)
{
con.getContentResolver().delete(Uri.parse("content://sms"), "address=? and date=?", new String[] {msgs[i].getOriginatingAddress(), String.valueOf(msgs[i].getTimestampMillis())});
}
}
catch (Exception ex)
{
Toast.makeText(con, "Error: " + ex, Toast.LENGTH_SHORT).show();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.