手机通讯录备份代码实现二

package app.utils;import java.util.ArrayList;
import java.util.List;import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.telephony.SmsManager;
import android.text.TextUtils;import com.google.common.collect.Lists;/*** 短信电话相关工具类<br/>* 目录: <br/>* 1.发送短信 sendSMS() <br/>* 2.拨打电话短信 callPhone() <br/>* 3.获取所有短信记录getAllSms() <br/>* 4.获取所有联系人getContactsList() <br/>* 5.获取所有联系人getContactList() : 与第4条所生成的数据结构不同 <br/>* <b>注</b>:使用时请添加相关权限** @author 赵LW QQ:739043667*/
public class SMSHelper {/*** 发送短信 (需要权限SMS_Send)** @param num  电话* @param text 短信内容*/public static void sendSMS(String num, String text) {SmsManager.getDefault().sendTextMessage(num, null, text, null, null);}public static void callPhone(Context context, String num) {Intent intent = new Intent();intent.setAction(Intent.ACTION_CALL);intent.setData(Uri.parse("tel:" + num));// 开启系统拨号器context.startActivity(intent);}/*** 获取所有联系人 需要权限* <uses-permission android:name="android.permission.READ_CONTACTS" />* 数据结构:ContactBean(String displayName, String numList)** @param* @return*/public static List<ContactBean> getContactList(Context context) {Logger.d("SMSHelper", "-----------SMSHelper#getContactList()----------");Logger.d("SMSHelper", "开始查询 Data 表");List<ContactBean> list = new ArrayList<ContactBean>();ContactsContract.Data._IDContentResolver resolver = context.getContentResolver();Cursor cursor = resolver.query(ContactsContract.Data.CONTENT_URI, null, null, null, null);if (cursor == null && cursor.getCount() <= 0) {return null;}Logger.d("SMSHelper", "cursor.getCount():" + cursor.getCount());while (cursor.moveToNext()) {String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));String number = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DATA1));//数据清洗if (TextUtils.isEmpty(number)) {continue;}if (!TextUtils.isDigitsOnly(number = number.replace(" ", ""))) {continue;}if (TextUtils.isEmpty(name)) {name = number;}list.add(new ContactBean(name, number));}cursor.close();return list;}/*** 获取所有联系人* 数据结构:ContactsBean(String displayName, List<String> numList)* <p/>* 需要权限:* <uses-permission android:name="android.permission.READ_CONTACTS" />** @param* @return List<ContactsBean>*/public static List<ContactsBean> getContactsList(Context context) {Logger.d("SMSHelper", "-----------SMSHelper#getContactsList()----------");Logger.d("SMSHelper", "开始查询 Contacts 表");List<ContactsBean> list = new ArrayList<ContactsBean>();ContactsBean bean = null;ContentResolver resolver = context.getContentResolver();Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);if (cursor == null && cursor.getCount() <= 0) {return null;}Logger.d("SMSHelper", "cursor.getCount():" + cursor.getCount());while (cursor.moveToNext()) {bean = new ContactsBean();String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));//姓名wirteNumbers(resolver, name, bean);list.add(bean);}cursor.close();return list;}/*** 根据联系人姓名查询电话* 并写入*/private static void wirteNumbers(final ContentResolver contentResolver, String name, final ContactsBean bean) {Logger.d("SMSHelper", "开始查询 Data 表 : 查询联系人:" + name);Cursor dataCursor = contentResolver.query(ContactsContract.Data.CONTENT_URI,new String[]{ContactsContract.Data.DATA1},ContactsContract.Data.DISPLAY_NAME + "= ? ",new String[]{name}, null);if (dataCursor == null) {Logger.w("SMSHelper", "dataCursor == null ");return;}if (dataCursor.getCount() > 0) {bean.setName(name);Logger.w("SMSHelper", " 电话信息 -- size: " + dataCursor.getCount());while (dataCursor.moveToNext()) {String number = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Data.DATA1));if (TextUtils.isEmpty(number) || !TextUtils.isDigitsOnly(number = number.replace(" ", ""))) {Logger.w("SMSHelper", " 电话信息(异常) -- number: " + number);continue;}bean.getNumList().add(number);Logger.w("SMSHelper", " 电话信息 -- number: " + number);}dataCursor.close();} else {Logger.w("SMSHelper", " 无电话信息 -- name: " + name);}return;}/*** 获取短信记录 (需要bean: Smsinfo.java和 Read_SMS权限)* <p>* <uses-permission android:name="android.permission.READ_SMS" />** @return List<Smsinfo>* @author zlw QQ:739043667*/public static List<SmsInfo> getAllSms(Context context) {List<SmsInfo> smsinfos = new ArrayList<SmsInfo>();Uri uri = Uri.parse("content://sms/");ContentResolver resolver = context.getContentResolver();Cursor cursor = resolver.query(uri, new String[]{"address", "date", "type", "body"}, null, null, null);SmsInfo smsinfo = null;while (cursor.moveToNext()) {String address = cursor.getString(0);String date = cursor.getString(1);String type = cursor.getString(2);String body = cursor.getString(3);smsinfo = new SmsInfo(address, date, type, body);smsinfos.add(smsinfo);}cursor.close();return smsinfos;}/*** 短信信息Bean 类** @param* @author zlw QQ:739043667* @return*/public static class SmsInfo {String address;String date;String type;String body;public SmsInfo(String address, String date, String type, String body) {super();this.address = address;this.date = date;this.type = type;this.body = body;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}}/*** 联系人集合Bean类*/public static class ContactsBean {private String name;private List<String> numList;public String getName() {return name;}public void setName(String name) {this.name = name;}public List<String> getNumList() {return numList;}public void setNumList(List<String> numList) {this.numList = numList;}public ContactsBean() {numList = Lists.newArrayList();}public ContactsBean(String displayName, List<String> numList) {super();this.name = displayName;if (numList == null) {this.numList = Lists.newArrayList();} else {this.numList = numList;}}@Overridepublic String toString() {return "ContactsBean [name=" + name + ", numList=" + numList + "]";}}/*** 联系人Bean类*/public static class ContactBean {private String name;private String number;public ContactBean() {}public ContactBean(String name, String number) {this.name = name;this.number = number;}public String getName() {return name;}@Overridepublic String toString() {return "ContactBean{" +"name='" + name + '\'' +", number='" + number + '\'' +'}';}public void setName(String name) {this.name = name;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}}}

源代 https://download.csdn.net/download/qq_26296197/11974840

手机通讯录备份代码实现二相关推荐

  1. 手机通讯录备份代码实现三

    前言 手机通讯录备份代码实现一和二的思路是通过 备份: while循环找到contact_id然后根据id找对应联系人所有电话和邮箱. 还原: 获取联系人列表通过for循环,一个一个插入手机通讯录 这 ...

  2. 手机通讯录备份代码实现一

    手机通讯录备份代码实现一 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFo ...

  3. android备份手机号码,Android手机通讯录备份还原代码

    最近想写段Android程序玩玩.开发环境 Eclipse ,Android 2.2 开发环境搭建 1.先安装jdk 2.下载安装eclipse 3.下载安装android sdk 4.安装eclip ...

  4. 苹果通讯录怎么备份?手机通讯录备份的方法看这里!

    案例:手机通讯录怎么备份? [友友们,想问下苹果手机的通讯录怎么样才能进行备份?可以解答我的疑惑吗?感谢!] 在日常使用手机过程中,我们经常会遇到误删通讯录的情况.因此,备份通讯录是非常重要的,可以避 ...

  5. Android手机通讯录备份和恢复项目

    Android手机通讯录备份和恢复项目 附下载地址** 登录功能 注册功能 找回密码 修改密码 备份功能 恢复功能 恢复数据从服务器 导出为Excel文件 登录功能 注册功能 找回密码 同注册功能 修 ...

  6. android手机通讯录备份还原代码,安卓手机误删联系人恢复及备份技巧总汇

    原标题:安卓手机误删联系人恢复及备份技巧总汇 现在很多手机都不再提供将联系人存入SIM卡中的功能了,所以如果你还习惯性的将联系人储存在手机内存当中,一旦手机丢失或者手机数据遗失,那么少则几十动辄几百的 ...

  7. 手机通讯录备份之后,如何在电脑上打开并且如何方便快速的导入另一个手机中

    之前用的是Nokia手机,现在换了一个Lenovo手机. 通讯录备份之后,将备份文件copy至PC上,然后将文件后缀改为.rar格式,解压之后找到contacts文件(在根文件夹里边多找几层,或者直接 ...

  8. 360 android手机备份通讯录,360手机卫士怎样备份手机通讯录 备份手机通讯录图文教程...

    软件安装:手机应用宝 随着科技的发展,手机在我们的生活中扮演了很重要的角色,手机在便利我们生活的同时,也会对我们造成很重要的影响.手机已经成为了我们的必需品,不仅是通讯工具,而且很大程度上都是娱乐功能 ...

  9. android手机通讯录备份还原代码,android手机通讯录备份还原代码

    最近想写段android程序玩玩. 开发环境 eclipse ,android2.2 开发环境搭建 1.先安装jdk 2.下载安装eclipse 3.下载安装android sdk 4.安装eclip ...

最新文章

  1. JAVA环境变量配置与配置后CMD的使用
  2. 实战:手把手教你实现用语音智能控制电脑 | 附完整代码
  3. 区块链分布式云存储项目盘点
  4. 日语2级语法总结--非190个语法点
  5. One order event display tool
  6. 安徽工业大学计算机考研历年分数线,安徽工业大学历年考研分数线汇总[2012-2021]...
  7. windows php sqlite,如何在Apache 2.4(Windows 7)上为PHP 5.6.14配置SQLite3?
  8. Python文档阅读笔记-OpenCV中Template Matching
  9. linux mysql启动错误
  10. 一个没有经验的前端工程师,写CSS的时候有什么常见通病?
  11. python模块 - functools模块
  12. Android UI系列-----Dialog对话框
  13. java对excel加密_java 加密 excel
  14. 计算机中的没有文件怎么处理方法,电脑重启后桌面上文件没有了怎么办
  15. Java使用zip4j库 压缩文件工具类(自适应压缩包编码格式)
  16. 总结:linux运维常用命令
  17. python接口自动化测试视频教程百度云全集_python自动化运维测试框架实战视频教程百度云资源...
  18. 只会画火柴人?手残怎样开始学画画?
  19. Codeforces Problem-133A HQ9+
  20. 百度地图完全模仿链家找房,三级下钻联动聚合,画圈找房!

热门文章

  1. 不显示样式 引用bootstrap_Bootstrap的引用样式
  2. Microsoft SignalR Map Controller具有页面可见性API和事件模糊功能,可映射文档管理系统(DMS)中的用户交互
  3. PowerShell 7.0 RC 发布
  4. Visual Studio 2019 16.1 正式发布,更快更高效
  5. C#中的正则表达式引擎
  6. python有null吗_Python世界中, 有Java中那种 @NotNull 吗( JetBrains提供的 ) ?
  7. poll函数_如何理解IO多路复用的三种机制Select,Poll,Epoll?
  8. linux空间不足 进不了系统更新,ubuntu更新时提示/boot空间不足的解决方法
  9. JAVA如何分段_OpenCV Java文本分段
  10. ajax异步验证效果展示,AJAX(二)-实现验证码异步验证功能(示例代码)