Android ContentObserver - определить статус смс - PullRequest
0 голосов
/ 06 сентября 2018

Я зарегистрировал ContentObserver для URI Telephony.Sms.CONTENT_URI, чтобы получать уведомления каждый раз, когда пользователь отправляет или получает новое SMS-сообщение.

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

Внутри функции onChange наблюдателя я пытался определить статус сообщения в соответствии с его типом, но все, что я получаю, это папка / тип Telephony.Sms.MESSAGE_TYPE_SENT (2) и статус Telephony.Sms.STATUS_NONE (-1), оба из которые не указывают на то, что отправка не удалась. Вот код, который я использовал:

@Override
public void onChange(boolean selfChange, Uri uri) {
    ContentResolver contentResolver = mContext.getContentResolver();
    try (Cursor cursor = contentResolver.query(uri, null, null, null, null)) {
        if (cursor == null || !cursor.moveToFirst()) {
            // log goes here
            return;
        }

        int folderId = cursor.getInt(cursor.getColumnIndex("type"));
        int status = cursor.getInt(cursor.getColumnIndex("status"));
    }
}

Я также пытался в рамках той же функции запросить (используя URI Telephony.Sms.CONTENT_URI) все SMS-сообщения, которых я раньше не видел, а затем извлечь те же поля, что и в предыдущем примере кода - но результат останется прежним.

Я также пытался запросить конкретные URI, которые должны возвращать список всех сообщений с определенным статусом (как перечислено здесь ), но я продолжал получать пустой курсор, не уверен, почему:

Cursor cursor = contentResolver.query(Telephony.Sms.CONTENT_URI.buildUpon().appendPath("all").build(), null, null, null, null))

(также пробовал с другими добавленными путями, такими как «fail», «queued», «outbox», «undelivered», все из которых не работали).

Кстати, этот код был протестирован только на Samsung Galaxy A7 под управлением Android 7.0, когда стандартным приложением для обмена сообщениями является Google Android Messages (не приложение для обмена сообщениями Samsung, которое было в комплекте с телефоном) так что, возможно, это как-то повлияло на результаты, я не уверен.

Суть в том, что вопрос - как я могу проверить, было ли сообщение успешно отправлено или нет? (при условии, что я не тот, кто его отправляет, потому что тогда я получу обратный вызов, который содержит статус для этой конкретной попытки)

...