Bluetooth 获取手机联系人与通话记录

49 阅读1分钟

1、创建实体

public class BluetoothCallLog {
    public String name;
    public String phoneNumber;
    public int  type;
    public String date;

    public BluetoothCallLog(String name, String phoneNumber, int type, String date) {
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.type = type;
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }


    @Override
    public String toString() {
        return "BluetoothCallLog{" +
                "name='" + name + ''' +
                ", phoneNumber='" + phoneNumber + ''' +
                ", type=" + type +
                ", date=" + date +
                '}';
    }
}

public class BluetoothContact {

    private String name;
    private String homeNumber;
    private String pinyinSimple;
    private Bitmap bitmap;

    public BluetoothContact() {
    }

    public BluetoothContact(String name, String homeNumber,String pinyinSimple,Bitmap bitmap) {
        this.name = name;
        this.homeNumber = homeNumber;
        this.pinyinSimple=pinyinSimple;
        this.bitmap = bitmap;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHomeNumber() {
        return homeNumber;
    }

    public void setHomeNumber(String homeNumber) {
        this.homeNumber = homeNumber;
    }

    public String getPinyinSimple() {
        return pinyinSimple;
    }

    public void setPinyinSimple(String pinyinSimple) {
        this.pinyinSimple = pinyinSimple;
    }

    public Bitmap getBitmap() {
        return bitmap;
    }

    public void setBitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }

    @Override
    public String toString() {
        return "BluetoothContact{" +
                "name='" + name + ''' +
                ", homeNumber='" + homeNumber + ''' +
                ", Bitmap='" + bitmap + ''' +
                '}';
    }

}

2、蓝牙连接手机,查询通讯录数据

public class BtHelper {

    private static final String TAG = "BtHelper";

    public static List<BluetoothContact> getTargetContact(ContentResolver resolver, String selection) {
        List<BluetoothContact> contacts = new ArrayList<>();
        BluetoothContact bluetoothContact = null;
        Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, selection, null, null);
        if (cursor.getCount() <= 0) {
            return null;
        }
        while (cursor.moveToNext()) {
            int _id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            String selet = ContactsContract.Data.CONTACT_ID + "=" + _id;
            int hasPhoneNumber = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
            if (hasPhoneNumber > 0) {
                Cursor phc = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, selet, null, null);
                while (phc.moveToNext()) {
                    String phoneNumber = phc.getString(phc.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll("-", "");
                    int phoneType = phc.getInt(phc.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                    Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, _id);
                    // 打开头像图片的InputStream
                    InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);
                    // 从InputStream获得bitmap
                    Bitmap headBmp = BitmapFactory.decodeStream(input);
                    String pinyinLabel = "";
                    Log.d(TAG, "name = " + displayName + "  phoneNumber = " + phoneNumber + "    pinyinLabel=" + pinyinLabel + "   type = " + phoneType + " headBmp= " + headBmp);
                    bluetoothContact = new BluetoothContact(displayName, phoneNumber, pinyinLabel, headBmp);
                }
                contacts.add(bluetoothContact);
                phc.close();
            }
        }
        cursor.close();
        return contacts;
    }


    public static List<BluetoothContact> getContacts(Context context) {
        List<BluetoothContact> targetContact = new ArrayList<>();
        BluetoothDevice mDevice = BluetoothHeadsetUtil.getConnectedDevice();
        ContentResolver resolver = context.getContentResolver();
        Cursor contactsCursor = resolver.query(ContactsContract.RawContacts.CONTENT_URI, null, null, null, null);
        if (contactsCursor != null && contactsCursor.getCount() > 0) {
            while (contactsCursor.moveToNext()) {
                String name = contactsCursor.getString(contactsCursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME));
                Log.d(TAG, "getContacts--- " + name);
                if (!TextUtils.equals(name, mDevice.getAddress())) {
                    continue;
                }
                int contactId = contactsCursor.getInt(contactsCursor.getColumnIndex(ContactsContract.RawContacts._ID));
                String selection = ContactsContract.Contacts._ID + "=" + contactId;
                List<BluetoothContact> contacts = getTargetContact(resolver, selection);
                if (contacts != null) {
                    targetContact.addAll(contacts);
                }
            }
            contactsCursor.close();
        }
        return targetContact;
    }

    public static List<BluetoothCallLog> getCallLogList(Context context) {
        ContentResolver resolver = context.getContentResolver();
        List<BluetoothCallLog> callLogList = new ArrayList<>();
        Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, new String[]{
                        CallLog.Calls.CACHED_NAME,
                        CallLog.Calls.NUMBER,
                        CallLog.Calls.TYPE,
                        CallLog.Calls.DATE},
                null, null, CallLog.Calls.DEFAULT_SORT_ORDER);
        if (cursor == null) {
            return null;
        }
        Log.e(TAG, "getCallLogList: " + cursor.moveToNext());
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
            String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
            int type = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE));
            String date = String.valueOf(cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)));

            BluetoothCallLog callLog = new BluetoothCallLog(name, number, type, date);
            Log.e(TAG, "name:   " + name + "   number:  " + number + "   type:   " + type + "   date:  " + date);
            if (!callLogList.contains(callLog)) {
                callLogList.add(callLog);
            }
        }
        cursor.close();
        return callLogList;
    }
}