下面的代码基于 Api23 编译,并使用 荣耀6 Android 6.0 系统测试 OK。


一、调用系统拨号界面

例如:拨打 10086

  1. Uri phoneUri = Uri.parse("tel:10086");
  2. Intent intent = new Intent(Intent.ACTION_DIAL, phoneUri);
  3. startActivity(intent);

特点: 1、不需要电话权限:android.permission.CALL_PHONE。 2、而且在拨出去之前还可以确认号码的正确性,以及是否真的要拨出去。 3、会在通话记录里面生成新纪录。

二、直接拨打电话

例如:拨打 10086

  1. Uri phoneUri = Uri.parse("tel:10086");
  2. Intent intent = new Intent(Intent.ACTION_CALL, phoneUri);
  3. ///检查权限
  4. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
  5. Log.e("Shawn", "call: 没有权限");
  6. return;
  7. }
  8. startActivity(intent);

特点: 1、需要电话权限:android.permission.CALL_PHONE。 2、不需要跳转任何界面,直接就能拨出去。 3、会在通话记录里面生成新纪录。

但自6.0开始加入了动态权限机制,仅仅只在 AndroidManifest.xml 里面声明电话权限是不够的,还必须在调用代码前添加权限检测,就像上面那样。