android 11 pbap获取通讯录的方法
时间: 2023-11-30 14:02:19 浏览: 217
Android通过蓝牙使用Pbap协议读取通讯录
4星 · 用户满意度95%
在Android 11中,PBAP获取通讯录的方法与之前的版本略有不同。以下是使用PBAP获取通讯录的步骤:
1. 确保设备支持PBAP协议,并且已经连接到目标设备。可以使用BluetoothAdapter.getDefaultAdapter().getProfileProxy()方法获取PBAP代理对象。
2. 使用PBAP代理对象的requestPhonebook()方法请求电话簿。该方法需要传入一个电话簿类型参数,例如ContactsContract.PBAP_VCARD_TYPE。
3. PBAP代理对象会异步返回电话簿数据。可以使用ContentResolver.insert()方法将数据插入到设备的联系人数据库中。
以下是一个示例代码:
```java
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothPbapClient pbapClient = null;
bluetoothAdapter.getProfileProxy(context, new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
if(profile == BluetoothProfile.PBAP_CLIENT) {
pbapClient = (BluetoothPbapClient) proxy;
pbapClient.start();
pbapClient.setPriority(device, BluetoothProfile.PRIORITY_AUTO_CONNECT);
pbapClient.requestPhonebook(device, ContactsContract.PBAP_VCARD_TYPE);
}
}
@Override
public void onServiceDisconnected(int profile) {
if(profile == BluetoothProfile.PBAP_CLIENT) {
pbapClient = null;
}
}
});
ContentValues values = new ContentValues();
values.put(ContactsContract.RawContacts.ACCOUNT_TYPE, null);
values.put(ContactsContract.RawContacts.ACCOUNT_NAME, null);
Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
String selectPhone = ContactsContract.Data.RAW_CONTACT_ID + " = " + rawContactId + " AND " + ContactsContract.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'";
values.clear();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber);
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
```
需要注意的是,Android 11中的PBAP获取通讯录需要用户授权。因此,在使用PBAP获取通讯录时,需要请求相应的权限。
阅读全文