Устранение различий между телефонами, когда приложение использует Intent.ACTION_SEND - PullRequest
1 голос
/ 08 января 2011

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

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

Ответы [ 2 ]

2 голосов
/ 13 января 2011

Мне удалось обойти это, благодаря некоторой помощи по другим вопросам о 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);
2 голосов
/ 08 января 2011

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

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

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

В резюме вы не можете.

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

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

Однако любые такие альтернативные версии ДОЛЖНЫ соответствовать тем же шаблонам Намерений, которые были предоставлены вышестоящим проектом.Например, если устройство содержит альтернативный музыкальный проигрыватель, оно все равно должно учитывать шаблон 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) и будет раздражать запись, но с большей вероятностью будет работать на всех устройствах.

...