Android: ActivityNotFoundException иногда возникает при попытке отправить MMS на определенные устройства - PullRequest
1 голос
/ 24 октября 2011

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

File imageFile = new File(getContext().getFilesDir() + File.separator + fileName);
Uri uri = Uri.fromFile(imageFile);
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setClassName("com.android.mms", "com.android.mms.ui.ComposeMessageActivity");
sendIntent.putExtra("sms_body", ""); 
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setType("image/png");
getContext().startActivity(sendIntent);

Ошибка, которую я вижу - только очень редко -:

android.content.ActivityNotFoundException: не удалось найти явный класс активности {com.android.mms / com.android.mms.ui.ComposeMessageActivity}; Вы объявили об этой активности в вашем AndroidManifest.xml?

Я подозреваю, что, возможно, некоторые операторы изменили Android и переопределили / отключили стандартную активность MMS. У меня нет действительно хорошего способа проверить это, поскольку все физические устройства и носители, на которых я лично проверял это, не имеют проблем с этим кодом. И, как я уже говорил, эмулятор Droid Bionic работает нормально, но это было одно из устройств в этой области, которое имело проблему.

Мне интересно, сталкивался ли кто-нибудь с чем-то подобным и предложил ли это обходное решение? Или если у кого-то есть способ отправки MMS на Android, который работает на всех устройствах / носителях.

(Пока я просто ловлю исключение и сообщаю пользователю, что я не могу отправить MMS с его устройством.)

p.s. Я видел на другом форуме кого-то, кто предлагал просто удалить имя класса для намерения. Проблема в том, что когда вы делаете это, все и все другие типы приложений говорят, что они могут справиться с намерением (например, Evernote), когда на самом деле я действительно просто хочу MMS или ничего.

Ответы [ 2 ]

3 голосов
/ 04 ноября 2014

запишите с INTENT

intent.setPackage("com.android.mms");

вместо

intent.setClassName("com.android.mms", "com.android.mms.ui.ComposeMessageActivity");
1 голос
/ 25 октября 2011

Вы можете сделать ...

  1. Продолжайте пробовать этот подход, но поймайте исключение ActivityNotFoundException.
  2. Если вы получили исключение ActivityNotFoundException, попробуйте запустить другие приложения, которые пользователь мог установить (VZMessages, Zlango Messaging, Handcent, ChompSMS и т. Д.).
  3. Если все они терпят неудачу, сообщите своему пользователю, что вы хотите отправить MMS, а затем запустите намерение, не указав класс. Таким образом, пользователи сами выбирают приложение, которое отправляет MMS-сообщения.
...