Android实现拨打电话功能

news2024/12/24 9:06:46

Android实现拨打电话功能

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

先上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>

demo下载

demo下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python色板介绍:让数据可视化更加迷人

Python色板介绍&#xff1a;让数据可视化更加迷人 在数据可视化中&#xff0c;合适的配色方案是非常重要的。Python色板是一种常用的工具&#xff0c;可以帮助数据分析师和科学家创建漂亮、易于阅读的图表。本文将为大家介绍Python色板&#xff0c;包括一些主流的Python色板、…

百度排名代发|百度排名蜘蛛池代发收录排名接单!

百度排名代发|百度排名蜘蛛池代发收录排名接单! 推广告忽然没有展现了&#xff0c;咋回事&#xff1f; 这是今天一个粉丝问我的问题&#xff0c;我帮他看了一下&#xff0c;是因为他推广了一个打不开的链接&#xff0c;所以说百度没有给他展现&#xff0c;可以看一下这个还好…

微信小程序-上拉加载更多和下拉刷新

微信小程序-上拉加载更多和下拉刷新 下拉刷新 页面配置文件中配置"enablePullDownRefresh": true开启下拉刷新 {"usingComponents": {},"navigationBarTitleText": "订单列表","enablePullDownRefresh": true }设置onPul…

使用阿里云域名和腾讯云服务器 出现的问题--------记录

这里使用阿里云申请的域名&#xff0c;阿里云备案成功 服务器为腾讯云&#xff0c;后端使用的node这里获取数据时返回一篇html如下 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" c…

【bug】vscode python 3.6 无法debug 解决方案

某个环境是使用python 3.6 安装的&#xff0c;vscode没法调试。是由于python插件太新了&#xff0c;直接下载一个&#xff0c;用VSIX安装 1.下载python 拓展包 https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/python/2022.6.0/…

【简单】使用ChatGPT和QT从零开始构建一个计算器应用

在这篇博文中&#xff0c;我将向大家展示如何使用ChatGPT和Qt来构建一个完整的计算器应用。我们将从零开始&#xff0c;逐步引导您完成整个项目&#xff0c;包括需求分析、软件设计、代码编写等环节。该项目代码全部由GPT编写,10分钟完成。 一&#xff0c;项目概述 本项目旨在…

数据库监控与调优【八】—— 索引类型

索引类型 MySQL有多种索引类型&#xff0c;使用不同的角度&#xff0c;分类也有所不同。 程序猿之间沟通时&#xff0c;经常会聊到各种索引类型&#xff0c;比如你说&#xff1a;“这是一个组合索引”&#xff0c;他说“这是一个聚簇索引”&#xff0c;如果不了解这些术语&am…

【计算机网络】UDP和TCP的对比

1.协议栈 2.面向连接&#xff1f; 3.支持单薄、多播、广播&#xff1f; 4.面向应用报文还是字节流&#xff1f; 5.应用场景 6.首部长度 7.小结

python 实现批量图片不拉伸尺寸归一化

在进行机器学习或深度学习之前&#xff0c;都要对样本图片进行预处理&#xff0c;其中需要将图片的尺寸统一调整。很多时候&#xff0c;样本的来源很多&#xff0c;尺寸和比例也不统一&#xff0c;可能来自于互联网爬虫&#xff0c;可能来自于不同的手机拍摄。如果将不同尺寸与…

CentOS Linux 8使用阿里源(安装jdk11、git测试)

一、备份 cd /etc/yum.repos.d/ mkdir bak mv CentOS-Linux-* bak二、下载新源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo三、安装软件测试 sudo yum -y install java-11-openjdk-devel java -versionsudo yu…

瑞亚太空活动公司RSA与英国国防与安全加速器达成量子项目合作

​ &#xff08;图片来源&#xff1a;网络&#xff09; 瑞亚太空活动公司&#xff08;RSA&#xff09;与英国国防与安全加速器&#xff08;DASA&#xff09;签署了合作协议&#xff0c;主要开发名为“无限交换”的可操纵量子真空的技术项目。这是RSA在英国签订的第一份合同&…

B端产品之数据分析能力

目录 学习目标&#xff1a;数据分析的思维框架以及工作需要的知识结构&#xff0c;数据分析结果外化-撰写数据分析报告 分析流程分析要点分析报告 数据分析流程 明确主题&#xff0c;尽量细化提出假设验证并修正假设&#xff1a;分析过程中对各个关联维度进行数据可视化观察…

怎么用迅捷PDF转换器在线提取PDF文件中的图片

大家在学习或者是办公中经常使用到PDF文件&#xff0c;我们在做一份工作文件的时候&#xff0c;需要一些资料来补充内容&#xff0c;这些资料是以PDF文件格式呈现&#xff0c;在使用PDF文件时&#xff0c;文件中有的图片做到很精细&#xff0c;想要单独提取保存下来备用。那么&…

【解决】IntelliJ IDEA无法识别package.json里面定义的脚本问题(npm: No scripts found)

错误提示&#xff1a;npm: No scripts found 在File-Settings-Editor-File Types&#xff0c;右边找到JSON&#xff0c;在File name patterns中添加了*.json,然后就识别了

全局安装vue脚手架,VSCode没有权限

一、全局安装vue脚手架 winR&#xff0c;输入cmd&#xff0c;打开命令行窗口&#xff0c;输入 npm install -g vue/cli &#xff0c;回车 npm install -g vue/cli 二、查看是否安装成功&#xff0c;出现版本信息&#xff0c;就表示安装成功 vue --version 三、打开VSCode&…

基于matlab偏振建模和分析(附源码)

一、前言 这个例子介绍了极化的基本概念。它展示了如何使用相控阵系统工具箱分析极化场并对极化天线和目标之间的信号传输进行建模。 二、电磁场的极化 天线产生的电磁场与远场中的传播方向正交。场可以指向此平面中的任何方向&#xff0c;因此可以分解为两个正交分量。从理论上…

EC\AC\BC\pair-wise组合覆盖测试技术

基本概念介绍 场景说明 某个美颜相机的系统测试&#xff1a; 被测对象1-【系统】取值有3种可能&#xff1a;windows\IOS\Linux 被测对象2-【摄像头】取值有4种可能&#xff1a;徕卡\索尼\三星\舜宇 被测对象3-【环境】取值有2种可能&#xff1a;白天\黑夜 问题&#xff1a;如何…

使用matlab求解常微分方程(组)问题

前言 介绍了常微分方程组的基本形式&#xff0c;并且介绍了matlab的数值和解析解法&#xff0c;以及给出了相应的案例。 前言1. 常微分方程组介绍1.1 一阶常微分方程组1.2 高阶常微分方程组1.2.1 形式1&#xff1a;单个高阶微分方程1.2.2 形式2&#xff1a;多个高阶微分方程组 …

XILINX 7系列FPGA普通IO与差分IO

&#x1f3e1;《Xilinx FPGA开发宝典》 目录 1&#xff0c;概述2&#xff0c;IO说明3&#xff0c;总结 1&#xff0c;概述 本文介绍XILINX 7系列FPGA普通IO和差分IO的识别方法与注意事项。 2&#xff0c;IO说明 7系列FPGA的绝大多数IO均支持差分&#xff0c;但是有些IO是不支持…

C语言:求Sn=a+aa+aaa+aaaa+aaaaa+……的前n项之和

题目&#xff1a; 求Snaaaaaaaaaaaaaaa……的前n项之和&#xff0c;其中a是一个数字&#xff0c; 例如&#xff1a;222222222222222…… 思路&#xff1a; 总体思路&#xff1a; &#xff08;一&#xff09;. 生成变量&#xff1a; int a 0; -- 题目中的a int n 0; -- a 的前…