Android实现拨打电话功能

Android实现拨打电话功能

  • 先上UI效果图
    • 点击联系博主
    • 拒绝权限
    • 同意权限
      • 直接拨号
    • 跳转到拨号界面
    • 跳转到拨号界面 同时附带号码
  • 代码实现
    • AndroidManifest.xml中添加权限
    • 点击联系博主
    • 判断是否有拨号权限
    • 申请权限回调
    • 直接拨号
    • 跳转到拨号界面
    • 跳转到拨号界面 同时附带号码
  • 完整代码
    • MainActivity.java
    • activity_main.xml
  • demo下载

先上UI效果图

点击联系博主

Android实现拨打电话功能_第1张图片

拒绝权限

Android实现拨打电话功能_第2张图片

同意权限

直接拨号

Android实现拨打电话功能_第3张图片

跳转到拨号界面

Android实现拨打电话功能_第4张图片

跳转到拨号界面 同时附带号码

Android实现拨打电话功能_第5张图片

代码实现

AndroidManifest.xml中添加权限

<uses-permission android:name="android.permission.CALL_PHONE" />

点击联系博主

		contactBlogger.setOnClickListener(v -> {
            callPhone();
//            callUI();
//            callPhoneUI();
        });

判断是否有拨号权限

	// 判断是否有拨号权限
    private boolean ifHaveCallPhonePermission() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            // 动态申请权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, CALL_PHONE_REQUEST_CODE);
            return false;
        }
        return true;
    }

申请权限回调

	// 申请权限回调
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == CALL_PHONE_REQUEST_CODE) {
            if (permissions.length != 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "请添加拨号权限后重试", Toast.LENGTH_SHORT).show();
            } else {
                callPhone();
//                callUI();
//                callPhoneUI();
            }
        }
    }

直接拨号

	// 直接拨号
    private void callPhone() {
        if (ifHaveCallPhonePermission()) {
            startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(phone)));
        }
    }

跳转到拨号界面

	// 跳转到拨号界面
    private void callUI() {
        if (ifHaveCallPhonePermission()) {
            startActivity(new Intent(Intent.ACTION_CALL_BUTTON));
        }
    }

跳转到拨号界面 同时附带号码

	// 跳转到拨号界面 同时附带号码
    private void callPhoneUI() {
        if (ifHaveCallPhonePermission()) {
            startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(phone)));
        }
    }

完整代码

MainActivity.java

package top.gaojc.callphonedemo;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button contactBlogger;
    private final String phone = "tel:13103679960";
    private final int CALL_PHONE_REQUEST_CODE = 10001;//拨号请求码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        contactBlogger = findViewById(R.id.contact_blogger);

        contactBlogger.setOnClickListener(v -> {
            callPhone();
//            callUI();
//            callPhoneUI();
        });
    }

    // 判断是否有拨号权限
    private boolean ifHaveCallPhonePermission() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            // 动态申请权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, CALL_PHONE_REQUEST_CODE);
            return false;
        }
        return true;
    }

    // 申请权限回调
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == CALL_PHONE_REQUEST_CODE) {
            if (permissions.length != 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "请添加拨号权限后重试", Toast.LENGTH_SHORT).show();
            } else {
                callPhone();
//                callUI();
//                callPhoneUI();
            }
        }
    }

    // 直接拨号
    private void callPhone() {
        if (ifHaveCallPhonePermission()) {
            startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(phone)));
        }
    }

    // 跳转到拨号界面
    private void callUI() {
        if (ifHaveCallPhonePermission()) {
            startActivity(new Intent(Intent.ACTION_CALL_BUTTON));
        }
    }

    // 跳转到拨号界面 同时附带号码
    private void callPhoneUI() {
        if (ifHaveCallPhonePermission()) {
            startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(phone)));
        }
    }
}

activity_main.xml


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/contact_blogger"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/contact_blogger" />

FrameLayout>

demo下载

demo下载

你可能感兴趣的:(Android,android,java,开发语言,拨打电话功能)