android.content.ActivityNotFoundException: No Activity found to handle Intent
代码如下:
public void sendMessage(String number) { if (TextUtils.isEmpty(number)) { return; } Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(Constants.SCHEME_SMS, number, null)); context.startActivity(intent); }
异常信息提示如下:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SENDTO dat=sms:xxxxxxxxxxx }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1632)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
at android.app.Activity.startActivityForResult(Activity.java:3424)
调查如下:
1,如果手机中没有能发送短信的app就会报出这样的错
2,手机中的能发送短信的应用被关闭了(设置-->应用-->app-->关闭);
解决方法:为了避免有的手机没有打开相应文件的app,在startActivity那里做一个try catch
public void sendMessage(String number) { if (TextUtils.isEmpty(number)) { return; } Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(Constants.SCHEME_SMS, number, null)); try { context.startActivity(intent); } catch(ActivityNotFoundException exception) { Toast.makeText(this, "no activity", Toast.LENGTH_SHORT).show(); } }
or 调用系统方法判断是否有对应的app
public void sendMessage(String number) { if (TextUtils.isEmpty(number)) { return; } Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(Constants.SCHEME_SMS, number, null)); PackageManager packageManager = getPackageManager(); List<ResolveInfo>applist = packageManager.queryIntentActivities(intent, 0); if (applist == null || applist.isEmpty()) { Toast.makeText(this, "no activity", Toast.LENGTH_SHORT).show(); return; } context.startActivity(intent); }