找不到用于处理意图 { act=android.intent.action.DIAL } 的活动

5
我想打开我的手机拨号器,但是它显示错误。我已经在Android清单中声明了CALL_PHONE权限,并且还在Android清单中声明了类。
case R.id.action_call:
Log.d("Action_call","INside Action call");
Intent dialer = new Intent(Intent.ACTION_DIAL);
startActivity(dialer);
return true;

2
我认为您正在使用不支持调用的制表符。 - Vivek Sinha
你的手机使用的是哪个操作系统版本? - Arpan Sharma
3个回答

6
你不需要为ACTION_DIAL意图获取任何权限。因此,请从AndroidManifest.xml中删除CALL_PHONE权限。
你没有传递任何号码来启动拨号意图。
使用tel:后跟电话号码作为传递给Uri.parse()的值:
尝试这段代码。
 String number = "1234567890";
 Uri number = Uri.parse("tel:" + number);
 Intent dial = new Intent(Intent.ACTION_DIAL);
 dial.setData(number);
 startActivity(dial);

编辑:

您可以首先检查设备是否支持电话功能。

private boolean isTelephonyEnabled(){
    TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
    return tm != null && tm.getSimState()==TelephonyManager.SIM_STATE_READY
}

我希望这对你有所帮助!


问题仍然存在。 - Loren
E/AndroidRuntime(12246): android.content.ActivityNotFoundException: 没有找到处理意图 { act=android.intent.action.DIAL dat=tel:xxxxxxxxxx } 的活动 - Loren
你在哪个设备上运行应用程序? - Rajesh Jadav
尝试在上述代码中使用ACTION_CALL而不是ACTION_DIAL,并在清单文件中添加CALL_PHONE权限,然后尝试。 - Rajesh Jadav
访问SimState需要networkState权限,是否有其他方法来检查电话是否被允许。因为打电话不需要网络状态,只是为了访问Sim状态而添加额外的权限来检查电话是否被允许似乎有点过度。 - soan saini

3
使用Uri解析数字。
Intent call = new Intent(Intent.ACTION_DIAL);
call.setData(Uri.parse("tel:"+phone));  //String phone
startActivity(call);

0
  • 使用 try/catch。
  • 使用 Uri 解析数字。
  • ACTION_DIAL 意图不需要任何权限。

    try{
        Intent call_intent = new Intent(Intent.ACTION_DIAL);
        call_intent.setData(Uri.parse("tel:"+phone_number));
        startActivity(call_intent);
    }catch(Exception e){
    }
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接