我想通过以下方式发送带有我的应用程序的短信:

Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
smsIntent.setData(Uri.parse("smsto:" + sms));
smsIntent.putExtra("smsto", sms);
smsIntent.putExtra("sms_body", "MYSMSBOBY");
mActivity.startActivity(smsIntent);


在有SMS应用程序的设备上运行正常,但是在某些设备上,我遇到此崩溃错误:

No Activity found to handle Intent { act=android.intent.action.VIEW dat=smsto:xxxxxxxxxx flg=0x10000000 (has extras) }


知道我如何识别设备上是否安装了SMS应用程序吗?

最佳答案

知道我如何识别设备上是否安装了SMS应用程序吗?


尽管您可以使用PackageManager查看是否有任何应用程序可以满足您的意图,但这根本不是您真正关心的问题。您应该注意的只是崩溃本身,而不是仅仅:

mActivity.startActivity(smsIntent);


您至少应该具有通用的异常处理代码:

try {
  mActivity.startActivity(smsIntent);
} catch ( Exception e ) {
    e.printStackTrace();
    // show toast or something so user knows why it is not working
}


并捕获startActivity()的任何失败。您可能还想为这种特殊类型的异常catch创建单独的ActivityNotFoundException

10-06 05:46