手機通訊錄備份代碼實現二

手機通訊錄備份代碼實現二

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章