有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android发送短信崩溃

我想用我的应用程序发送短信:

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=安卓.intent.action.VIEW dat=smsto:xxxxxxxxxx flg=0x10000000 (has extras) }

知道我如何识别手机上是否安装了短信应用程序吗


共 (2) 个答案

  1. # 1 楼答案

    <!  SMS  >
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    
    
        /**
         * Test if device can send SMS
         * @param context
         * @return
         */
        public static boolean canSendSMS(Context context) {
            return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
        }
    
  2. # 2 楼答案

    Any idea how i can recognize if SMS Application installed on the device?

    虽然你可以使用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()的任何失败。您可能还想为这种特殊类型的异常创建单独的catchActivityNotFoundException