来去电归属地[02]拦截外拨电话与来电的号码
来源:互联网 发布:岩土工程就业前景知乎 编辑:程序博客网 时间:2024/05/06 10:49
摘要
从以上思路图可以看出来去电显示的关键要点之一为拦截来去电时电话号码,有了这个号码我们才方便开展其他的功能代码,所以获取这个号码的知识点也就成为此时关注的焦点了。那么我们怎么获取外拨时的电话号码呢?Android系统里面是通过一个OutCall的广播通知其他程序,”有人向外拨电话了!!!号码是131....”,而对于来电的话,则是通过一个系统级的服务TelephonyManager来管理跟通讯有关的活动与参数,是不是很像候老师,有什么就业的难题都找他?TelephonyManager就是这样的,比方说想获取sim卡序列号,电话的通话状态(”有电话了打进来了!!!号码是131....”,)等等,都找这个Android版的候老师!!!既然是这样的,那么这个广播与管理者就是我们掌握的要点了。
1.采用代码注册拦截OutGoingCall广播
>权限
<!-- 外拨电话的广播拦截权限 --><uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
>代码注册广播
.外拨 [拦截一个Action为Intent.ACTION_NEW_OUTGOING_CALL的外拨广播 ]
// 创建过滤器IntentFilter filter = new IntentFilter();// 广播类型filter.addAction(Intent.ACTION_NEW_OUTGOING_CALL);filter.setPriority(1000);// 注册广播registerReceiver(outCallReceiver, filter);
注意
代码注册的广播在不用的时候要进行移除
// 3.回调:条件 stopService 仅有一次@Overridepublic void onDestroy() {super.onDestroy();System.out.println("--归属地服务----onDestroy---销毁");// 移除注册unregisterReceiver(outCallReceiver);}
>号码获取
// 拦截外拨的接收者private BroadcastReceiver outCallReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 获取号码头String number = super.getResultData();System.out.println("---outCallReciever-onReceive number=" + number);}};
2.拦截来电
>注册监听
常见的注册监听器的方式为manager.setON...Listener(); register...Listener 等 但是TelephonyManager这个监听真的不是很经典,或者说很变态!!!
// ##############TelephonyManager 通讯相关的服务 sim/通话状态 监听器拦截的manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);// 监听通话状态manager.listen(mPhoneStateListener, // 通话状态监听器PhoneStateListener.LISTEN_CALL_STATE// 设置监听类型);
注意
用完成不需要这个状态的话要进行移除操作
// 移除话状态监听manager.listen(mPhoneStateListener, // 通话状态监听器PhoneStateListener.LISTEN_NONE// 设置监听类型);
>事件处理
private PhoneStateListener mPhoneStateListener = new PhoneStateListener() {// 监听状态改变@Overridepublic void onCallStateChanged(//int state,// 状态String incomingNumber// 来电号码) {super.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_IDLE:// 没有电话dismissDialog();break;case TelephonyManager.CALL_STATE_RINGING:// 响铃dealNumber(incomingNumber);break;case TelephonyManager.CALL_STATE_OFFHOOK:// 接听break;}}};
注意
CALL_STATE_OFFHOOK不是挂断电话而是接通电话,正在通话中学员们老是搞反了,谁叫名字取得这么让人误解!!! 0 0
- 来去电归属地[02]拦截外拨电话与来电的号码
- 18、高级工具--显示来电与外拨电话号码的归属地
- 37来电号码归属地的显示
- 来去电归属地[01]基本思路与开发要点
- 4.1 来去电时更改归属地显示的位置
- Android中来电号码归属地的显示
- 来去电归属地入门学习
- Android显示来去电归属地
- Android设置来电号码归属地
- android 如何关闭来电号码归属地
- 号码归属地识别-Android电话应用
- 来去电归属地[03]WindowManager创建浮动窗口
- 号码归属地的查询
- Android 拦截外拨电话
- C# 号码归属地查询算法(根据Android来电归属地二进制文件查询修改)
- 100.来电归属地的显示
- 关闭来电归属地
- 来电归属地显示
- jni封装ffmpeg接口遇到的错误修改方法
- UItextView和UITextFlied
- AndroidManifest.xml详解
- 黑马程序员-Object C之分类
- Shopex模板机制总览(摘要版)
- 来去电归属地[02]拦截外拨电话与来电的号码
- C#(1)
- 生态环境下的养生学
- 配置Microsoft Visual SourceSafe 2005的Internet访问
- python3 http协议
- Unix时间戳(Unix timestamp)转换
- 跟我一起学Vim补全神级插件--YouCompleteMe
- Android开发之使用DefaultHandler处理XML数据
- 深入理解C++中的mutable关键字