一、需求背景
客户在使用我公司的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);
}
/**
* 注销
*