Безошибочный способ запуска SMS-намерения в Android - PullRequest
4 голосов
/ 01 марта 2012

В своем приложении для Android я использую следующий код, чтобы запустить приложение обмена сообщениями и ввести текст по умолчанию для текстового сообщения:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("sms:"+USERS_PHONE_NUMBER));
intent.putExtra("sms_body", "DUMMY TEXT");
startActivity(intent);

Это работает в большинстве случаев. Но, к сожалению, на некоторых устройствах я получаю следующее сообщение об ошибке:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=sms:+XXXXXXXXXX (has extras) }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1510)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1384)
at android.app.Activity.startActivityForResult(Activity.java:3131)
at android.app.Activity.startActivity(Activity.java:3237)

Очевидно, что созданное мной намерение не может быть обработано.

  • Есть ли какая-либо ошибка в коде моего SMS-сообщения?
  • Как предотвратить сбой приложения, если не удается обработать намерение?

Должен ли я использовать PackageManager.queryIntentActivities () или есть другой способ решения этой проблемы?

Заранее спасибо!

Ответы [ 3 ]

13 голосов
/ 01 марта 2012

Я специально не пробовал это намерение, но, возможно, самый простой способ - добавить блок try и catch

try {
    startActivity(intent);
} catch (ActivityNotFoundException e) {
    // Display some sort of error message here.
}

Поскольку вы не можете рассчитывать, что на конкретном устройстве Android будет установлено приложение Messaging (например, на некоторых планшетах нет служб телефонии), вы должны быть готовы.

В целом, при запуске внешних действий рекомендуется избегать сбоев в приложении.

2 голосов
/ 16 мая 2012

Вот код, который откроет действие SMS, предварительно заполненное номером телефона, на который необходимо отправить SMS.Это прекрасно работает как на эмуляторе, так и на устройстве.

Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.setData(Uri.parse("sms:" + phoneNumber); 
0 голосов
/ 25 сентября 2013

Вот метод, который я использую, чтобы безопасно открыть действия на Android и дать пользователю некоторую обратную связь, если активность не найдена.

public static void safeOpenActivityIntent(Context context, Intent activityIntent) {

        // Verify that the intent will resolve to an activity
          if (activityIntent.resolveActivity(context.getPackageManager()) != null) {
              context.startActivity(activityIntent);
          } else {
              Toast.makeText(context, "app not available", Toast.LENGTH_LONG).show();
          }
}

(кажется, я получил его из одного из видео для разработчиков Google на YouTube, но сейчас я не могу найти видео ...)

...