Android 使用BroadcastReceiver来监听手机来电

本文介绍了如何在Flutter应用中实现来电通知功能,由于Flutter本身不支持,因此通过Android原生的BroadcastReceiver来监听电话状态。文章详细讲解了添加权限、创建BroadcastReceiver子类、动态注册和注销广播、获取电话号码以及判断通讯录中是否存在该号码的过程。开发者需要注意申请相应的系统权限以确保功能正常运行。
摘要由CSDN通过智能技术生成

一、需求背景

客户在使用我公司的Flutter插件时,硬是要我们搞一个来电通知的功能,就很无语,我找了Flutter的一些插件,发现没有一个能实现这个功能的,最后只能通过Android来实现,我这个前端承受了不该承受的。

二、实现步骤

1. 添加权限

2. 创建一个类来继承BroadcastReceiver

3. 动态注册和注销广播

4. 检测电话状态,获取电话号码

5. 封装一个获取手机通讯录的方法

6. 判断通讯录中是否包含该电话号码,有就返回备注名称,否则返回电话号码

三、代码分享

1. 注册权限

在 AndroidManifest.xml 文件中添加权限,可能不需要这么多的权限,但是我为了以防万一还是加了这么多。

    <!--监听电话状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

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

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

2. 创建一个类来继承BroadcastReceiver

public class PhoneStateReceiver extends BroadcastReceiver {

    private static final String PHONE_STATE_RECEIVED = "android.intent.action.PHONE_STATE";
    private static int previousState = TelephonyManager.CALL_STATE_IDLE;

    private static PhoneStateReceiver receiver = new PhoneStateReceiver();

    /**
     * 注册
     *
     * @param context
     */
    public static void register(Context context) {
        IntentFilter filter = new IntentFilter();
        filter.setPriority(Integer.MAX_VALUE);
        filter.addAction(PHONE_STATE_RECEIVED);
        context.registerReceiver(receiver, filter);
    }

    /**
     * 注销
     *
   
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值