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 input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);
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;
}
}