Устранение различий между телефонами, когда приложение использует Intent.ACTION_SEND

1

У меня есть приложение, которое позволяет пользователю отправлять изображение. Это изображение может быть отправлено несколькими способами, такими как g-mail, facebook, flickr и тот, который меня интересует, текстовые сообщения. Когда выполняется следующий код, появляется диалоговое окно с рядом доступных параметров.

       Uri uri = Uri.fromFile(new File(externalDirectory + FILE_DIRECTORY + fileName));      
        Intent intent = new Intent(Intent.ACTION_SEND); 
        intent.putExtra(Intent.EXTRA_STREAM, uri);
        intent.setType("image/png"); 
        startActivity(intent);

На моем Droid X отображается текстовая функция обмена сообщениями, и этот код прекрасно добавляет изображение в MMS.

В эмуляторе текстовые сообщения выбираются автоматически (поскольку нет других опций), и снова он отлично работает.

На моем Droid Incredible нет опции обмена текстовыми сообщениями. Однако я могу вручную открыть встроенную утилиту для обмена текстовыми сообщениями, добавить картинку и отправить ее. Я также загрузил приложение с SMS/MMS с рынка, а затем появилась возможность использовать эту стороннюю программу для отправки изображения из списка.

Итак, почему текстовый обмен сообщениями недоступен для Droid Incredible? Что мне нужно сделать, чтобы сделать это возможным, и как я могу оценить эту проблему (ИЛИ НЕИЗВЕСТНЫЕ ПРОБЛЕМЫ) с телефонами, к которым у меня нет доступа?

Теги:
sms
mms

2 ответа

2
Лучший ответ

Мне удалось найти работу для этого, благодаря некоторой помощи от некоторых других вопросов о SO.

В основном ключ определял намерение, используемое HTC, которое, как представляется, единственная компания (в настоящее время), которая модифицировала android.intent.action.SEND Intent. Вот код для добавления опции в список.

Uri uri = Uri.fromFile(new File(mFile));  
Intent intent = new Intent(Intent.ACTION_SEND); 
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType("image/png"); 

Intent htcIntent = new Intent("android.intent.action.SEND_MSG");
htcIntent.setType("image/png");
htcIntent.putExtra(Intent.EXTRA_STREAM, uri);

Intent chooser = Intent.createChooser(intent, "Send Method");
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { htcIntent });
startActivity(chooser);
  • 1
    @ user432209: вздох . Это глупо на нескольких уровнях - у них нет веских причин для изменения этого действия, и они не должны изобретать android.intent.action.SEND_MSG (во всяком случае, это должно быть com.htc.intent.action.SEND_MSG ) ,
  • 0
    Я полностью согласен. В основном это устранение идиократии производителей.
Показать ещё 1 комментарий
2

Итак, почему текстовый обмен сообщениями недоступен для Droid Incredible?

Потому что они решили не предлагать его.

Что мне нужно сделать, чтобы сделать его опцией

В реферате вы не можете.

Указание Android Документ определения совместимости:

Проект Android upstream определяет ряд основных приложений, таких как телефонный дозвон, календарь, контактная книга, музыкальный проигрыватель и т.д. устройство разработчики МОГУТ заменить эти приложения альтернативными версиями.

Однако любые такие альтернативные версии ДОЛЖНЫ соблюдать те же шаблоны намерений, которые были предоставлены в рамках проекта вверх. Например, если устройство содержит альтернативный музыкальный проигрыватель, он должен по-прежнему соблюдать шаблон Intent, выпущенный сторонними приложениями, для выбора песни.

Ловушка, приложение Messenger не считается "основным приложением" от Google. Следовательно, производители устройств могут включать своих собственных клиентов SMS со своими фильтрами Intent. В случае с HTC Incredible, по-видимому, они не включили поддержку MMS через image/png ACTION_SEND Intent.

Теперь IMHO, Messenger, вероятно, должно быть основным приложением. Однако ваше мнение и мое не меняют реальности, как сегодня.

как я могу оценить эту проблему (ИЛИ НЕИЗВЕСТНЫЕ ПРОБЛЕМЫ) с телефонами? У меня нет доступа к

Вы переопределяете свое приложение таким образом, чтобы оно не было "проблемой". У вас нет гарантии, что вы можете отправить MMS таким образом, так же как у вас нет гарантии, что у пользователя установлено приложение Facebook.

Я мало знаю о MMS и не знаю, есть ли способ, кроме ACTION_SEND, отправить MMS. Вы можете подумать о том, чтобы вытащить исходный код в приложение Messenger, чтобы узнать, как он это делает. Затем, испечь эту возможность прямо в ваше приложение. Для этого потребуется несколько дополнительных разрешений (SEND_SMS и, вероятно, READ_CONTACTS) и будет раздражать запись, но с большей вероятностью будет работать на всех устройствах.

  • 0
    Это интересный документ. Похоже, Google допускает большую гибкость в этом отношении, что может быть благословением или проклятием. Спасибо за подробный ответ!
  • 0
    Удалось найти довольно хорошую работу вокруг. Смотрите ниже и еще раз спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню