调用Intent.ACTION_CALL时的ActivityNotFoundException

时间:2015-01-26 08:01:22

标签: java android activitynotfoundexception

执行Intent.ACTION_CALL操作时,我得到ActivityNotFoundException。我找到了许多链接,但所有链接都无法解决我的问题。

它有时会让我像

一样异常
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CALL dat=tel:xxx-xxx-xxxx pkg=com.android.phone (has extras) }

我在项目中使用了以下代码

String contact_number="123456789";
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + contact_number));
startActivity(callIntent);

4 个答案:

答案 0 :(得分:13)

无法保证可以处理给定的意图(即平板电脑可能根本没有电话应用程序)。如果没有intent-filter符合您意图的申请,那么您将面临ActivityNotFoundException例外。正确的方法是要注意这一点,并使用try/catch来防止崩溃并正确恢复:

try {
   String contact_number="123456789";
   Intent callIntent = new Intent(Intent.ACTION_CALL);
   callIntent.setData(Uri.parse("tel:" + contact_number));
   startActivity(callIntent);
} catch (Exception e) {
   // no activity to handle intent. show error dialog/toast whatever
}

此外,您应该使用ACTION_DIAL,而ACTION_CALL需要其他权限。

答案 1 :(得分:10)

在启动之前,您应该检查是否有任何处理此意图的活动。如果您的应用仅在具有wifi的平板电脑上运行且无电话功能,则可能会发生这种情况。此外,如果您只打算启动拨号器,最好使用ACTION_DIAL而不是ACTION_CALL来直接从您的应用中调用。

final Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"));
if (dialIntent.resolveActivity(context.getPackageManager()) != null) {
    // put your logic to launch call app here
  }

答案 2 :(得分:5)

我已经解决了这个问题。我使用了以下代码

String contact_number="123456789";
Intent callIntent = new Intent(Intent.ACTION_CALL);
intent.setPackage("com.android.phone");
callIntent.setData(Uri.parse("tel:" + contact_number));
startActivity(callIntent);

我为Lollipop取代了这一行

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

intent.setPackage("com.android.server.telecom");

答案 3 :(得分:0)

这是我的代码。

n*log(n)*log(n)