Android通话记录过滤和监听
来源:互联网 发布:重庆网络推广 编辑:程序博客网 时间:2024/06/06 01:53
1.通话记录过滤
通常在显示通话记录的时候,只需要显示每个人通话记录的最后一次,那么就要过滤掉每个人多次通话记录的其它记录,一想到这个,自然就想到sql group by语句,但是通过Android提供的内容提供者getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder)去查询,不能在其中加入group by语句,通过query()方法提供的参数,最多也只能从selection去添加查询条件,那么可以通过最后一次通话的_id进行条件查询,先获得电话号码记录每个人最后一次通话记录的_id,然后组拼selection语句,下面为简单实现:
public Cursor getCursor(Context context) {Log.d(TAG, "AllMoodFragment-->getCursor()");ContentResolver cr = context.getContentResolver();Cursor allCursor = cr.query(CallLog.Calls.CONTENT_URI,new String[] { CallLog.Calls._ID, CallLog.Calls.NUMBER,CallLog.Calls.DATE }, null, null,CallLog.Calls.DEFAULT_SORT_ORDER);Map<String, Integer> numberMap = new HashMap<String, Integer>();if (allCursor != null && allCursor.getCount() > 0) {while (allCursor.moveToNext()) {String number = allCursor.getString(1);if (!numberMap.containsKey(number)) {numberMap.put(allCursor.getString(1),allCursor.getInt(0));}}}if (allCursor != null) {allCursor.close();allCursor = null;}StringBuilder sb = new StringBuilder();int length = numberMap.size();Integer[] _ids = numberMap.values().toArray(new Integer[length]);for (int i = 0; i < length; i++) {sb.append(CallLog.Calls._ID + "=" + _ids[i]);sb.append(" or ");}if (sb.length() >= 4) {sb.delete(sb.length() - 4, sb.length());}Cursor filterCursor = cr.query(CallLog.Calls.CONTENT_URI,new String[] { CallLog.Calls._ID, CallLog.Calls.NUMBER,CallLog.Calls.DATE, CallLog.Calls.DURATION,CallLog.Calls.TYPE, CallLog.Calls.CACHED_NAME },sb.toString(), null, CallLog.Calls.DEFAULT_SORT_ORDER);return filterCursor;}
2.通话记录监听
Android提供了ContentObserver类来进行监听数据的变化,原理为设计模式中的观察着模式,实现很简单:
mContext.getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, new ContentObserver(mHandler) {@Overridepublic boolean deliverSelfNotifications() {return true;}@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);//当通话记录改变时,执行该方法}});
0 0
- Android通话记录过滤和监听
- android 通话记录和联系人查询
- android 通话记录和联系人查询
- android 通话记录和联系人查询
- android删除和查询通话记录
- Android获取手机短信和通话记录及通讯录
- Android获取手机短信和通话记录及通讯录
- Android 获取通话记录和短信内容
- Android下如何获得通话记录和短信记录
- Android手机短信,通话记录和通讯录的相关操作
- Android——查询通话记录和删除记录
- Android通话记录ListView实现左滑发短信和右滑打电话
- Android点击跳转到联系人列表、拨号面板和通话记录
- Android 6.0 通话记录生成保存和读取显示
- android 通话记录次数
- android中获取通话记录
- Android 获取通话记录
- android查询通话记录小结
- Selection和Range对象
- markDown的简单使用
- 如何使用strace+pstack利器分析程序性能
- 【前端学习】javascript正则表达式和字符串RegExp and String(二)
- bones脚本篇 - 模拟一个按钮
- Android通话记录过滤和监听
- 查看动态链接库依赖关系的命令
- HDU 1787 GCD Again (欧拉函数)
- IOS CGContextRef 写图形跟文字
- [mysql实战] mysql基本操作 下
- android四大组件之Service个人总结
- Unity3d 性能优化篇
- UIViewController的生命周期及iOS程序执行顺序
- Xmpp-----openfire的配置