Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用Intent.ACTION\u调用时ActivityNotFoundException_Java_Android_Activitynotfoundexception - Fatal编程技术网

Java 调用Intent.ACTION\u调用时ActivityNotFoundException

Java 调用Intent.ACTION\u调用时ActivityNotFoundException,java,android,activitynotfoundexception,Java,Android,Activitynotfoundexception,当执行Intent.ACTION\u调用操作时,我得到了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 extr

当执行Intent.ACTION\u调用操作时,我得到了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);

在开始之前,您应该检查是否有任何活动处理此意图。如果你的应用程序运行在只支持wifi且没有手机功能的平板电脑上,就会发生这种情况。此外,如果您只想启动拨号程序,最好使用
ACTION\u DIAL
而不是直接从应用程序拨打电话的
ACTION\u 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
  }

无法保证可以处理给定的意图(即平板电脑可能根本没有电话应用程序)。如果没有具有匹配的
意图过滤器的应用程序
,则您将面临
活动NotFoundException
。正确的方法是意识到这一点,并使用
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
}

另外,您应该改用
操作拨号
,因为
操作呼叫
需要额外的权限。

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

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);
我把这条线换成了棒棒糖

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

这是我的密码

if (BuildUtil.isAndroidM()) {
        if (ActivityCompat.checkSelfPermission(mActivity,
                Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(mActivity, PermissionUtil.requestPermissionFineAndCoarse(),
                    PHONE_REQUEST_CODE);
        }
    } else {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        if (BuildUtil.isAndroidL()) {
            callIntent.setPackage("com.android.server.telecom");
        } else {
            callIntent.setPackage("com.android.phone");
        }
        callIntent.setData(Uri.parse("tel:" + phone));
        startActivity(callIntent);
    }

ACTION\u-DIAL
不是正确的吗?我不认为没有任何用户输入就可以启动呼叫。您正在呼叫该号码-如果您已经有了该号码,那么您需要什么输入?我从用户输入中获取联系号码,这只是我在问题中使用的一个示例。我不能使用行动拨号,因为我需要在不显示拨号的情况下拨打电话,我的部分答案是错误的?我没有提到任何关于许可的事。官方文件还建议使用ACTION\u DIAL over ACTION\u CALL我已获得许可,无法使用ACTION\u DIAL,因为我需要在不显示拨号的情况下直接呼叫联系人。此问题发生在LG Nexus-4版本(5.0.1)中,不在表中。您可以尝试设置
额外的电话号码
?我不认为使用try catch可以解决我的问题先生,如果我想将来电从我的应用程序切换到默认系统应用程序,该怎么办?你知道这件事吗?我将此方法与“ACTION_ANSWER”一起使用,但不起作用。使用您的代码,我得到错误:未找到处理Intent的活动{act=android.Intent.ACTION.CALL dat=tel:xxxxxxxxxxxxx pkg=com.android.phone}
if (BuildUtil.isAndroidM()) {
        if (ActivityCompat.checkSelfPermission(mActivity,
                Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(mActivity, PermissionUtil.requestPermissionFineAndCoarse(),
                    PHONE_REQUEST_CODE);
        }
    } else {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        if (BuildUtil.isAndroidL()) {
            callIntent.setPackage("com.android.server.telecom");
        } else {
            callIntent.setPackage("com.android.phone");
        }
        callIntent.setData(Uri.parse("tel:" + phone));
        startActivity(callIntent);
    }