AndroidManifest.xml
<uses-permission android:name="android.permission.CALL_PHONE" />
MainActivity.java
package com.gaozewen.phone;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
// 请求 打电话的运行时权限,1 和 请求打电话 形成映射关系
private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE = 1;
private EditText mEt_phone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 加载布局
setContentView(R.layout.activity_main);
// 寻找关心的控件ctrl + alt + f
mEt_phone = findViewById(R.id.et_phone);
Button bt_dail = findViewById(R.id.bt_dail);
bt_dail.setOnClickListener(new MyButtonListener());
}
private void callPhone() {
// 2. 当用户点击按钮的时候获取里面的电话号码
String phoneNum = mEt_phone.getText().toString().trim();
if ("".equals(phoneNum)) {
// this 永远是 布局对象的实例
Toast.makeText(MainActivity.this, "电话号码不能为空", Toast.LENGTH_SHORT).show();
} else {
// 1. 创建一个意图对想想
Intent intent = new Intent();
// 2. 设置动作
intent.setAction(Intent.ACTION_CALL);
// 3. 指定动作的数据
// url 统一资源定位符 http:// ftp://
// uri 统一资源标识符(包含url) mailto: tell:/
intent.setData(Uri.parse("tel://" + phoneNum));
// 4. 开启一个界面,根据程序员指定的行为来做事情
startActivity(intent);
// 5. AndroidManifest.xml 设置权限 (6.0 加入了运行时权限,所以 老版本只要这样配置就可以了)
// <uses-permission android:name="android.permission.CALL_PHONE" />
// 新版本: 运行时权限
}
}
private class MyButtonListener implements View.OnClickListener {
@Override
public void onClick(View view) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CALL_PHONE},
MY_PERMISSIONS_REQUEST_CALL_PHONE);
} else {
callPhone();
}
}
}
// 布局组件中 接收请求授权的回调
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) { // 对应的是 打电话 授权结果回调
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
callPhone();
} else { // Permission Denied
Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}