android监听通话时长只针对在APP中拨打电话
来源:互联网 发布:天谕动漫人物捏脸数据 编辑:程序博客网 时间:2024/04/28 05:07
最近在做一个OA系统,需求极其恶心,就不吐槽了其中的一个需求就是要监听通话的时长,拿到这个需求马上就想到读取通话记录,但是也还有问题啊,打完电话马上要干别的事,而遍历通手机话记录需要耗时,于是就跟设计狗讨论下,只计算从他在APP按拨号键到结束通话回到该界面的通话时长就可以了,这就很简单了,用PhoneStateListener 就可以实现。下面来看代码
//通话监听 private TelephonyManager tm; private MyPhoneListener MyPhoneListener; private long callTime;//通话时长 private long firstCallTime;//点击拨号时候的时间 private boolean isCall = false;//是否拨打过电话 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_customer_info); //监听通话 tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); MyPhoneListener = new MyPhoneListener(); tm.listen(MyPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);} /** * 监听通话时长 */ class MyPhoneListener extends PhoneStateListener { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE://空闲 System.err.println(" 空闲"); if (isCall) { callTime = System.currentTimeMillis() - firstCallTime; } break; case TelephonyManager.CALL_STATE_RINGING://响铃 System.out.println("发现来电!!!!!"); break; case TelephonyManager.CALL_STATE_OFFHOOK://通话状态 isCall = true; firstCallTime = System.currentTimeMillis(); System.out.println("通话状态!!!!!"); break; default: break; } } }
PhoneStateListener 用于监听手机通话状态的,三个状态意思如下
1.CALL_STATE_IDLE:此时手机处于空闲状态,
2.CALL_STATE_RINGING:此时处于来电状态
3.CALL_STATE_OFFHOOK:通话状态
PhoneStateListener 一开始监听手机就处于空闲状态,当主动拨打电话时,此时处于通话状态,当挂断电话时又回到空闲状态,你可以自己打印日志查看PhoneStateListener 的状态。知道打电话到挂断的状态后计算时间就很简单了。
firstCallTime 就是点拨号键开始打电话的时间,挂断回到空闲状态,用currentTimeMillis()-firstCallTime 就是通话时长,想不通就多想多测试。
你以为这样就完了,这样是可以监听到通话时长,但是同时问题也出现了,打电话时间很长的时候,当手机内存不足可能将PhoneStateListener 回收,所以不管怎么打电话通话时长一直为0,测试人员告诉我的时候很郁闷啊,我的手机上一点问题都没有,他测的就有问题(他用的手机只有2G内存),之后也是想到这个原因,所以写了一个服务,在服务里监听通话,在状态变为空闲的时候发送条广播,把calltime发送出去,activity接收,这样就没问题了。服务就不发代码了,很简单跟上面差不多就是发送个广播,在activity中接收就可以了,是在不会的留言吧。最后别忘了
@Override public void onDestroy() { //取消电话监听 tm.listen(MyPhoneListener, PhoneStateListener.LISTEN_NONE); super.onDestroy(); }
- android监听通话时长只针对在APP中拨打电话
- 在android中实现电话拨打功能
- 在服务中监听电话的通话状态
- Android中监听电话接听拨打、收发短信的实例
- App应用中拨打电话
- Android 监听电话的拨打状态
- Android 应用中拨打电话
- Android手机开发:在程序中拨打电话
- 拨打紧急电话,在通话界面会快速闪现正常通话界面的人头图片
- 【Android】Android开发初学者实现拨打电话的功能,拨打电话app小demo实现
- 关于android电话监听显示(类似360通话)
- android监听用户的拨打电话的状态
- android监听用户的拨打电话的状态
- Android中如何调用拨打电话?
- android中拨打电话的事件
- android 拨打电话、 监听来电、监听呼出电话的功能实现
- 在android中监听呼出电话(电话拦截、修改呼出电话)
- Android 小应用:“自动拨打电话app”制作心得
- ubuntu16.04QT5.8安装和arm环境下的qte-5.8.0安装配置
- mysql字符串截取
- ELECTRICAL TYPE
- nginx配置本地虚拟域名
- react-native 代码编程规范、约定
- android监听通话时长只针对在APP中拨打电话
- Java基础核心知识总结(绝对经典)
- csdn 请选择文章类型 解决办法
- 利用Nginx—rtmp—moudle搭建直播服务器
- spring ref和value的用法
- 二叉搜索树转换成双向链表
- WQ25之模式纠结
- 特征选择算法综述
- 【CSS】之 (微信页面)表格或图片超出可来回滑动,标题保持不动