[英]Deleting Android SMS programmatically
我想在我的 Android 應用程序中自動刪除某些短信。 因此,我有一種方法可以完全滿足我的要求。 但是,只有當我從 Eclipse 將應用程序直接部署到我的手機時,它才有效。 然后它刪除傳入的短信。 但是,如果應用程序是從市場上下載的,則它不起作用。 但也沒有錯誤。 有誰知道我如何解決這個問題,或者這只適用於有根設備的設備嗎?
public void deleteSMS(Context context, String message, String number) {
try {
mLogger.logInfo("Deleting SMS from inbox");
Uri uriSms = Uri.parse("content://sms/inbox");
Cursor c = context.getContentResolver().query(uriSms,
new String[] { "_id", "thread_id", "address",
"person", "date", "body" }, null, 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);
if (message.equals(body) && address.equals(number)) {
mLogger.logInfo("Deleting SMS with id: " + threadId);
context.getContentResolver().delete(
Uri.parse("content://sms/" + id), null, null);
}
} while (c.moveToNext());
}
} catch (Exception e) {
mLogger.logError("Could not delete SMS from inbox: " + e.getMessage());
}
}
實際上,我帖子中的代碼是 100% 正確的。 問題是Android在收到短信后需要一些時間來存儲它。 所以解決方案是只添加一個處理程序並將刪除請求延遲 1 或 2 秒。
這實際上解決了整個問題。
編輯(感謝馬克西姆·德米特里耶夫):
請注意,您無法在裝有 Android 4.4 的設備上刪除 SMS 消息。
此外,系統現在只允許默認應用程序向提供程序寫入消息數據,盡管其他應用程序可以隨時讀取。
http://developer.android.com/about/versions/kitkat.html
如果你嘗試,不會拋出任何異常; 什么都不會被刪除。 我剛剛在兩個模擬器上對其進行了測試。
請注意,您無法在裝有 Android 4.4 的設備上刪除 SMS 消息。
此外,系統現在只允許默認應用程序向提供程序寫入消息數據,盡管其他應用程序可以隨時讀取。
http://developer.android.com/about/versions/kitkat.html
如果你嘗試,不會拋出任何異常; 什么都不會被刪除。 我剛剛在兩個模擬器上對其進行了測試。
嘿,使用此代碼刪除自定義短信 1. 按日期 2. 按號碼 3. 按正文
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);
Log.e("log>>>",
"0--->" + c.getString(0) + "1---->" + c.getString(1)
+ "2---->" + c.getString(2) + "3--->"
+ c.getString(3) + "4----->" + c.getString(4)
+ "5---->" + c.getString(5));
Log.e("log>>>", "date" + c.getString(0));
ContentValues values = new ContentValues();
values.put("read", true);
getContentResolver().update(Uri.parse("content://sms/"),
values, "_id=" + id, null);
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[] { c.getString(4) });
Log.e("log>>>", "Delete success.........");
}
} while (c.moveToNext());
}
} catch (Exception e) {
Log.e("log>>>", e.toString());
}
您可以選擇哪個應用是 4.4+ 中的默認短信應用,如果您的應用設置為默認應用,它也可以刪除短信。
將應用程序設為默認應用程序, 請參閱此內容。 在刪除之前檢查您的應用程序是否是默認的短信應用程序。 使用電話類提供的 URI 而不是硬編碼。
public void deleteSMS(Context context,int position)
{
Uri deleteUri = Uri.parse(Telephony.Sms.CONTENT_URI);
int count = 0;
Cursor c = context.getContentResolver().query(deleteUri, new String[]{BaseColumns._ID}, null,
null, null); // only query _ID and not everything
try {
while (c.moveToNext()) {
// Delete the SMS
String pid = c.getString(Telephony.Sms._ID); // Get _id;
String uri = Telephony.Sms.CONTENT_URI.buildUpon().appendPath(pid)
count = context.getContentResolver().delete(uri,
null, null);
}
} catch (Exception e) {
}finally{
if(c!=null) c.close() // don't forget to close the cursor
}
}
它刪除所有(收件箱、發件箱、草稿)短信。
private int deleteMessage(Context context, SmsMessage msg) {
Uri deleteUri = Uri.parse("content://sms");
int count = 0;
@SuppressLint("Recycle") 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;
}
使用此代碼........
要么
getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null);
我正在尋找一種一鍵刪除所有短信的方法。 感謝這篇文章,我成功了。 如果有人感興趣,這是我的方法:
private void deleteSMS(){
Uri myUri= Uri.parse("content://sms/");
Cursor cursor = getContext().getContentResolver().query(myUri, null,null,null,null);
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
int thread_id = cursor.getInt(1);
getContext().getContentResolver().delete(Uri.parse("content://sms/conversations/" + thread_id),null,null);
}
cursor.close();
}
如果您想收到一條消息並且您的短信應用程序您的 Android 設備手機沒有發送任何通知,請使用二進制(數據)短信。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.