本文用到的RecyclerView标题悬浮,参考连接

先看看图片详情:

device-2017-01-08-113015.png

device-2017-01-08-113047.png

获取通讯录之后按照时间.类型分类,同一号码同一类型在当天只出现一次

因为考虑到还有悬停的问题,RecyclerView学习(四)----城市导航列表的实现(上)中的思想是:获取对象名字的拼音然后排序,他这样做是为了侧边索引。因为本文并不需要用到索引,所以并不需要获取拼音,只获取每个通话的时间yyyy-MM-dd,通过比较时间(eques),这样就可以根据悬浮的原理来实现日期分类

一直有个疑问:Java为什么会有eques,感觉跟牵强啊

我实现分类的思想是:因为我查询通话记录是按照时间顺序来的。

/**

* 获取所有的通话记录

*

* @param context

*/

public void getCallLog(Context context) {

try {

callInfoLogs.clear();

ContentResolver cr = context.getContentResolver();

Uri uri = CallLog.Calls.CONTENT_URI;

String[] projection = new String[]{CallLog.Calls.NUMBER, CallLog.Calls.DATE,

CallLog.Calls.TYPE, CallLog.Calls.CACHED_NAME, CallLog.Calls.DURATION, CallLog.Calls.GEOCODED_LOCATION};

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {

}

Cursor cursor = cr.query(uri, projection, null, null, CallLog.Calls.DATE + " DESC");

while (cursor.moveToNext()) {

CallInfoLog callInfoLog = new CallInfoLog();

String number = cursor.getString(0);//电话号码

long date = cursor.getLong(1);//通话时间

int type = cursor.getInt(2);//通话类型

String name = cursor.getString(3);//名字

String duration = cursor.getString(4);//通话时长

String areaCode = cursor.getString(5);//归属地

String callTime = TransitionTime.convertTimeFirstStyle(date);//格式化时间yyyy-MM-dd

if (TransitionTime.getTodayData().equals(callTime)) {//如果是今天的话

callInfoLog.setCallTime("今天");

} else if (TransitionTime.getYesData().equals(callTime)) {

callInfoLog.setCallTime("昨天");

} else {

callInfoLog.setCallTime(callTime);

}

callInfoLog.setNumber(number);

callInfoLog.setDate(date);

callInfoLog.setType(type);

callInfoLog.setName(name);

callInfoLog.setCountType(1);

callInfoLog.setDuration(duration);

callInfoLog.setCode(areaCode);

//筛选数据

if (TextUtils.isEmpty(number)) {

callInfoLogs.add(callInfoLog);

continue;

}

boolean isadd = screenData(callInfoLogs, callInfoLog);

if (isadd) {

callInfoLogs.add(callInfoLog);

}

}

cursor.close();

callLogAdapter.notifyDataSetChanged();

} catch (Exception e) {

e.printStackTrace();

}

}

顺便说下:

查看电话记录---CallLog.Calls.CONTENT_URI

CallLog.Calls.CACHED_NAME查询的联系人名字

CallLog.Calls.TYPE电话类型,

CallLog.Calls.NUMBER电话号码

CallLog.Calls.DATE电话日期

(注意:CallLog.Calls.TYPE电话类型的取值 来电:1,拨出:2,未接:3)

查询出来的数据按照:cursor.moveToNext() 时都是按照最新的先获取,所以数据筛选时都要和之前的数据对比,如果是同一号码同一类型同一天的话就不在放入集合中,而是给已经存在的最新的数量上+1。

/**

* 筛选数据

* @param callInfoLogs

* @param info

* @return

*/

private boolean screenData(ArrayList callInfoLogs, CallInfoLog info) {

if (callInfoLogs.size() > 0) {

for (int i = 0; i < callInfoLogs.size(); i++) {

CallInfoLog callInfoLog = callInfoLogs.get(i);

//如果说是日期和类型全部一样的话那么这个通话记录就不要,变成一个数量归为最近一次记录里面

if (callInfoLog.getCallTime().equals(info.getCallTime()) && callInfoLog.getType() == info.getType() && info.getNumber().equals(callInfoLog.getNumber())) {

callInfoLog.setCountType(callInfoLog.getCountType() + 1);//递增一次

//结束这次数据查找

return false;

}

}

}

return true;

}

以上就是重要的两部分

源码地址

android获得手机的时间格式,Android获取手机通讯录并按照时间电话类型分类处理...相关推荐

  1. Android项目:手机安全卫士(15)—— 获取手机安装应用与存储空间

    Android项目:手机安全卫士(15)-- 获取手机安装应用与存储空间 1 介绍 今天来讲讲手机安全卫士的第三个功能:软件管理,其实也不应该叫管理,称为软件应用信息查看更正确一点,就是显示手机已安装 ...

  2. 时间格式处理获取本年份的起止时间

    文章目录 1.ios兼容性问题 2.倒计时函数 3.获取当前年份起止时间 4.时间格式转换 1.ios兼容性问题 对于时间格式 ios不能识别横杠 获取本年份的起止时间 `/***``\* 得到本年的 ...

  3. python秒数转化为时间格式_python将秒数转化为时间格式的实例

    python将秒数转化为时间格式的实例 1.转化成时间格式 seconds =35400 m, s = divmod(seconds, 60) h, m = divmod(m, 60) print(& ...

  4. android获取时区时间格式,Android关于获取日期时间知识点整理

    项目开发过程中,获取时间日期以及一些转换呢,老忘记来着,总得花时间去查找资料,于是乎,现在终于要来整理整理下这方面的知识点了,用于巩固自己的记忆! 时间戳(timestamp) 指格林威治时间1970 ...

  5. h5获取android手机版本,Vue.js怎么获取手机系统型号、版本、浏览器类型

    Vue.js怎么获取手机系统型号.版本.浏览器类型 发布时间:2020-07-28 11:22:33 来源:亿速云 阅读:161 作者:小猪 这篇文章主要为大家展示了Vue.js怎么获取手机系统型号. ...

  6. android通话记录手机号码归属地,mui 获取手机通话记录

    export default { onLoad() { this.log(); // this.msg(); // this.concat(); }, methods: { log() { // 获取 ...

  7. Android开发 亲测可用--多种方式获取手机短信验证码自动填入

    Android开发 静态注册.动态注册.短信中心库监控获取手机验证码,自动复制到剪切板或或填入输入框. 友情提醒初学者:这是广播接收器的类,写在xml中静态注册或写在启动类的Oncreate方法下动态 ...

  8. android gps时间格式,android – GPS:NTP时间注入的工作原理

    我最近知道一个gps.conf文件在/ system / etc /目录. 似乎将NTP_SERVER值调整到更接近通常位置的NTP服务器改善了TTFF. 读取LocationProvider类中的源 ...

  9. [获取手机信息]-通过 ADB 命令获取手机信息

    ################################################## 目录 通过 ADB 命令获取手机信息 ADB 常用查看命令 使用 -l 查看设备详细信息 查看机型 ...

最新文章

  1. SoapUI:mock service的简单使用
  2. 计算机应用能力 中文字处理,全国职称计算机应用能力考试《Word 2003中文字处理》考试大纲...
  3. Python基础06-Python异常处理
  4. ASP.NET Web实时消息后台服务器推送技术---GoEasy
  5. 点击底部input输入框,弹出的软键盘挡住input(苹果手机使用第三方输入法 )
  6. java 数据结构_Java版-数据结构-队列(数组队列)
  7. MongoDB分布式集群分片
  8. SpringBoot异常处理机制之自定义404、500错误提示页面
  9. centos7平台手动搭建snort入侵检测系统
  10. SpringBoot项目:抽奖精灵
  11. 视频课程:CMOS模拟集成电路版图设计
  12. ip地址和域名的关系是什么?
  13. A*算法中二叉堆的使用
  14. Unity2D游戏制作常用方法
  15. Unreal Engine4和Unity3D对比
  16. Win10下如何找到下载的主题壁纸,并提取图片
  17. 阿轩的复习笔记-主从库数据一致性
  18. 2021计算机一级新增知识点,2021年全国计算机等级考试改革有哪些内容
  19. 5年多工作经验,工资给15k,要是你,你会接受吗?
  20. revi怎么弄插件能够使附件发生一定角度的旋转?

热门文章

  1. 瞎姬霸写之畅想互联网
  2. 移动端单击图片放大缩小
  3. (1)ARCH效应、均值方程、GARCH族模型、对波动率建模、预测(包含代码)
  4. CSS漂亮搜索框代码
  5. Kafka的消息模型
  6. c语言中mul的用法,MUL指令(无符号数的乘法指令)
  7. 计算机网络量化噪音是怎么消除的,数字图像噪声消除算法研究(可编辑).doc
  8. 循环神经网络RNN了解
  9. 如何判断一个数是否是素数
  10. nodeJS+mysql+连接池——连接池的创建和使用