Разбор полученных MMS для изображений и текста

Я разрабатываю приложение хранилища SMS-MMS для Android. Его целью будет исправление пары существующих в Android уязвимостей, а также создание «безопасного» пространства для общения между определенными контактами (Зашифрованные SMS и MMS).

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

Итак, здесь возникает мой вопрос:

После получения намерения MMS, как мне проанализировать изображение и текст?


person Diogo Monteiro    schedule 16.04.2017    source источник


Ответы (1)


Итак, что вы можете сделать, чтобы получить изображения, это получить идентификатор MMS и пройти («content://mms/part»), выполнить проверку типа:

String type = cursor.getString(cursor.getColumnIndex("ct"));
String partId = cursor.getString(cursor.getColumnIndex("_id"));


//is type a picture
if ("image/jpeg".equals(type) || "image/bmp".equals(type)
    || "image/gif".equals(type) || "image/jpg".equals(type)
    || "image/png".equals(type)) {
                   getMmsImage(partId); // load in your picture
      }

Теперь, когда у вас есть идентификатор части, вы знаете местоположение изображения, поэтому вы можете загрузить его, используя все, что хотите, например, если вы просто хотите, чтобы это было растровое изображение, которое вы можете сделать:

public Bitmap getMmsImage(String _id, Context context) {

        Uri partURI = Uri.parse("content://mms/part/" + _id);
        InputStream is = null;
        Bitmap bitmap = null;
        try {
            is = context.getContentResolver().openInputStream(partURI);
            bitmap = BitmapFactory.decodeStream(is);

        } catch (Exception e) {// probably should do an ioException around here}
        finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {}
            }
        }
        return bitmap;
    }

Теперь я хотел бы отметить, что если бы вы хотели анимированные GIF-файлы, это не сработало бы, оно загружало бы GIF-изображения, но они были бы неподвижными изображениями. если вы хотите, чтобы они были анимированными, вы можете использовать что-то вроде Glide и указать путь для uri. Glide требует времени для загрузки GIF-файлов, просто честное предупреждение.

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

person John Saunders    schedule 03.05.2017