Android实现拨打电话功能

简介: Android实现拨打电话功能

先上UI效果图

点击联系博主


拒绝权限

同意权限

直接拨号


跳转到拨号界面


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


代码实现

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

<?xml version="1.0" encoding="utf-8"?>
<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>
目录
相关文章
|
6天前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
105 0
|
6天前
|
安全 Linux Android开发
Android 安全功能
Android 安全功能
43 0
|
6天前
|
Android开发
Android SystemUI去掉拖动亮度条QSPanel界面隐藏功能
Android SystemUI去掉拖动亮度条QSPanel界面隐藏功能
12 0
|
6天前
|
Java Android开发
Android Mediatek 应用层重置USB设备功能
Android Mediatek 应用层重置USB设备功能
14 0
|
6天前
|
Linux Android开发
Android 内核关闭CAN 串口设备回显功能
Android 内核关闭CAN 串口设备回显功能
13 0
|
6天前
|
XML 前端开发 Java
Android App实战项目之实现手写签名APP功能(附源码,简单易懂 可直接实用)
Android App实战项目之实现手写签名APP功能(附源码,简单易懂 可直接实用)
60 0
|
6天前
|
机器学习/深度学习 人工智能 TensorFlow
安卓中的人工智能:集成机器学习功能
【4月更文挑战第14天】在数字化时代,人工智能与机器学习正驱动安卓平台的技术革新。谷歌的ML Kit和TensorFlow Lite为开发者提供了便捷的集成工具,使得应用能实现图像识别、文本转换等功能,提升用户体验。尽管面临数据隐私和安全性的挑战,但随着技术进步,更强大的AI功能将预示着移动端的未来,为开发者创造更多创新机遇。
|
6天前
|
人工智能 测试技术 Android开发
Android实现点击链接跳转功能
Android实现点击链接跳转功能
31 1
|
6天前
|
存储 数据库 Android开发
Android实现手机内存存储功能
Android实现手机内存存储功能
27 2
|
6天前
|
Rust 资源调度 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】使用Barcode Scanner实现扫码功能(安卓)
【一起学Rust | 框架篇 | Tauri2.0框架】使用Barcode Scanner实现扫码功能(安卓)
139 0