下面的代码基于 Api23 编译,并使用 荣耀6 Android 6.0 系统测试 OK。
一、调用系统拨号界面
例如:拨打 10086
Uri phoneUri = Uri.parse("tel:10086");Intent intent = new Intent(Intent.ACTION_DIAL, phoneUri);startActivity(intent);
特点: 1、不需要电话权限:android.permission.CALL_PHONE。 2、而且在拨出去之前还可以确认号码的正确性,以及是否真的要拨出去。 3、会在通话记录里面生成新纪录。
二、直接拨打电话
例如:拨打 10086
Uri phoneUri = Uri.parse("tel:10086");Intent intent = new Intent(Intent.ACTION_CALL, phoneUri);///检查权限if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {Log.e("Shawn", "call: 没有权限");return;}startActivity(intent);
特点: 1、需要电话权限:android.permission.CALL_PHONE。 2、不需要跳转任何界面,直接就能拨出去。 3、会在通话记录里面生成新纪录。
但自6.0开始加入了动态权限机制,仅仅只在 AndroidManifest.xml 里面声明电话权限是不够的,还必须在调用代码前添加权限检测,就像上面那样。
