簡體   English   中英

以編程方式刪除Android SMS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM