[android] 手机卫士接收打电话广播显示号码归属地
2023-02-18 15:46:58 时间
使用广播接收者接收打电话的意图,显示号码归属地
新建一个类OutCallReceiver继承系统的BroadcastReceiver
重写onReceive()方法
调用getResultData()方法,获取到String电话号码,查询数据库获取到归属地
package com.qingguow.mobilesafe.receiver; import com.qingguow.mobilesafe.utils.NumberQueryAddressUtil; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; /** * 接收打电话广播 * @author taoshihan * */ public class OutcallReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { String phone=getResultData(); String address=NumberQueryAddressUtil.queryAddress(phone); System.out.println("111"+address); Toast.makeText(arg0, address, 1).show(); } }
清单文件中定义<receiver>节点,和<intent-filter>节点,设置<action>节点名称,android:name=”android.intent.action.NEW_OUTGOING_CALL”
需要权限,android.permission.PROCESS_OUTGOING_CALLS
代码注册广播
此时的广播接收者,只要一打电话就会被调用,用户体验不好,我们使用代码注册广播接收者,用设置中心的开启监听电话来电的部分来控制这个广播
在服务里面调用registerReceiver()方法,注册广播,参数:BroadcastReceiver对象,IntentFilter对象
获取IntentFilter对象,调用IntentFilter对象的addAction()方法,参数:android.intent.action.NEW_OUTGOING_CALL
在服务里面解除注册广播,调用unregisterReceiver()方法,参数:BroadcastReceiver对象
package com.qingguow.mobilesafe.service; import com.qingguow.mobilesafe.receiver.OutcallReceiver; import com.qingguow.mobilesafe.utils.NumberQueryAddressUtil; import android.app.Service; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.widget.Toast; /** * 来电显示 * * @author taoshihan * */ public class AddressService extends Service { private TelephonyManager tm; private MyPhoneStateListener phoneStateListener; private OutcallReceiver outcallReceiver; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } /** * 服务创建 */ @Override public void onCreate() { super.onCreate(); tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); phoneStateListener = new MyPhoneStateListener(); tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); //注册广播 outcallReceiver=new OutcallReceiver(); IntentFilter filter=new IntentFilter(); filter.addAction("android.intent.action.NEW_OUTGOING_CALL"); registerReceiver(outcallReceiver, filter); } private class MyPhoneStateListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_RINGING: String info = NumberQueryAddressUtil .queryAddress(incomingNumber); Toast.makeText(getApplicationContext(), info, 1).show(); break; default: break; } } } /** * 服务销毁 */ @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); //取消监听 tm.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); phoneStateListener=null; //解除注册广播 unregisterReceiver(outcallReceiver); outcallReceiver=null; } }
相关文章
- 小程序化正在成为大势所趋?
- 小程序化正在成为线上教育服务的最佳方式
- 技术干货|如何借助FinClip实现小程序在硬件设备上的运行
- Jitpack发布Android库出现Direct local .aar file dependencies are not supported when building an AAR
- 关于Android12安装apk出现-108异常INSTALL_PARSE_FAILED_MANIFEST_MALFORMED的解决方法
- Android 多module情况下module依赖aar问题处理
- Android7.0以上的分享图片文件错误及解决方法
- Android开发 对接微信分享SDK总结
- Android RecyclerView使用ListAdapter高效刷新数据
- Android自动化测试工具调研
- Android 自动取色并设置沉浸式状态栏
- Java 断点下载(下载续传)服务端及客户端(Android)代码
- Android自定义View学习(1)——基础知识介绍
- Android webview只加载10%且出现白屏问题排查解决
- Android Studio安装插件重启插件消失
- Android Swtich开关样式调整
- Android 实现开机自启APP
- 关于TornadoFx和Android的全局配置工具类封装实现及思路解析
- Android shape与selector标签使用
- Android8.0 后台服务保活的一种思路