Подтвердить что ты не робот

Удаление программных продуктов Android SMS

Я хочу удалить некоторые определенные SMS автоматически в приложении для Android. Поэтому у меня есть метод, который делает именно то, что я хочу сделать. Однако он работает только в том случае, если я разворачиваю приложение непосредственно на свой телефон из Eclipse. Затем он удаляет входящие SMS-сообщения. Однако это не работает, если приложение загружается с рынка. Но также нет ошибки. Кто-нибудь знает, как я могу это решить или это работает только на корневых устройствах?

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());
    }
}
4b9b3361

Ответ 1

Собственно, код в моем сообщении на 100% правильный. Проблема заключалась в том, что Android требуется некоторое время для хранения SMS после его получения. Таким образом, решение состоит в том, чтобы просто добавить обработчик и отложить запрос удаления на 1 или 2 секунды.

Это фактически решило всю проблему.

РЕДАКТОР (спасибо Максиму Дмитриеву):

Пожалуйста, учтите, что вы не можете удалять SMS-сообщения на устройствах с Android 4.4.

Кроме того, теперь система позволяет только приложению по умолчанию записывать данные сообщения поставщику, хотя другие приложения могут читать в любое время.

http://developer.android.com/about/versions/kitkat.html

Никакое исключение не будет выбрано, если вы попробуете; ничего не будет удалено. Я только что протестировал его на двух эмуляторах.

Как отправить SMS-сообщения программно

Ответ 2

Пожалуйста, учтите, что вы не можете удалять SMS-сообщения на устройствах с Android 4.4.

Кроме того, теперь система позволяет только приложению по умолчанию записывать данные сообщений провайдеру, хотя другие приложения могут читать в любое время.

http://developer.android.com/about/versions/kitkat.html

Никакое исключение не будет выбрано, если вы попробуете; ничего не будет удалено. Я только что протестировал его на двух эмуляторах.

Как отправить SMS-сообщения программно

Ответ 3

Используйте этот код, чтобы удалить настройку sms 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

Вы можете выбрать, какое приложение является SMS-приложением по умолчанию в 4.4+, и если ваше приложение установлено по умолчанию, оно также сможет удалить SMS.

Ответ 5

чтобы сделать приложение как приложение по умолчанию, посмотрите это. Проверьте, является ли ваше приложение приложением по умолчанию перед удалением. Используйте 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
        }

   }

он удаляет все (входящие, исходящие, черновики) SMS.

Ответ 6

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);

Ответ 7

Начиная с Android 4.4 и выше, только одно приложение может удалять, обновлять, блокировать или делать что-либо. Поэтому для работы необходимо установить приложение в качестве приложения для обмена сообщениями по умолчанию. Для получения дополнительной информации обратитесь сюда Официальная страница Android на изменение политики

Ответ 8

если вы хотите получить сообщение и приложение для смс, ваш телефон на устройстве Android не отправлял никаких уведомлений, используйте двоичные (данные) SMS. см. эту ссылку http://codetheory.in/android-sms/