2011-01-08 3 views
1

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

 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? Что мне нужно сделать, чтобы сделать это возможным, и как я могу оценить эту проблему (ИЛИ НЕИЗВЕСТНЫЕ ПРОБЛЕМЫ) с телефонами, к которым у меня нет доступа?

ответ

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

@ пользователь432209: * вздох *. Это дрянь на нескольких уровнях - нет веских оснований для того, чтобы они изменили это действие, и они не должны изобретать 'android.intent.action.SEND_MSG' (во всяком случае, это должно быть' com.htc.intent.action .SEND_MSG'). – CommonsWare

+0

Я полностью согласен. Это в основном фиксация производителей идиократии. – user432209

+0

Также обратите внимание, что тип MIME должен быть image/png, image/* не будет работать. – Freddroid

2

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

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

Что мне нужно сделать, чтобы сделать его вариант

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

Цитируя Android Compatibility Definition Document:

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

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

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

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

как я оцениваю эту проблему (или неизвестные проблемы) с типами телефонов у меня нет доступа к

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

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

+0

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

+0

Удалось найти неплохую работу. См. Ниже и еще раз спасибо. – user432209

Смежные вопросы