手機通訊錄備份代碼實現二
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._ID
ContentResolver 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;
}
}
@Override
public 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;
}
@Override
public 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