Android拨打电话
1 在Manifest清单中配置拨号权限
<uses-permission android:name="android.permission.CALL_PHONE">uses-permission>
*注意:
在所有版本的 Android 中,您的应用都需要在其应用清单中同时声明它需要的正常权限和危险权限
如果设备运行的是 Android 5.1 或更低版本,或者应用的目标 SDK 为 22 或更低:如果您在清单中列出了危险权限,则用户必须在安装应用时授予此权限;如果他们不授予此权限,系统根本不会安装应用。
如果设备运行的是 Android 6.0 或更高版本,或者应用的目标 SDK 为 23 或更高:应用必须在清单中列出权限,
并且它必须在运行时请求其需要的每项危险权限。用户可以授予或拒绝每项权限,且即使用户拒绝权限请求,应用仍可以继续运行有限的功能。
2 在事件中进行运行时授权
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.CALL_PHONE)) {
Toast.makeText(MainActivity.this, "请授权!", Toast.LENGTH_LONG).show();
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}else{
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CALL_PHONE},
MY_PERMISSIONS_REQUEST_CALL_PHONE);
}
}else {
callPhone();
}
3 实现打电话的功能
private void callPhone(){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
Uri phoneNum = Uri.parse("tel:" + str);
intent.setData(phoneNum);
startActivity(intent);
}
4 处理权限请求响应回调
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode){
case MY_PERMISSIONS_REQUEST_CALL_PHONE: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
CallPhone();
} else {
Toast.makeText(this, "授权失败!", Toast.LENGTH_LONG).show();
}
break;
}
}
}
参考 google developer:
https://developer.android.com/training/permissions/requesting.html#perm-check