您的位置:首页 > 编程语言 > PHP开发

ContentProvider读写联系人列表以及权限处理

2016-06-10 18:57 726 查看
ContentProvider简介:

一个内容提供者访问数据的中央资源库。提供者是应用程序的一部分,提供自己的操作数据的UI。然而,内容提供者主要是被其他应用程序引用,通过提供者客户对象访问提供者。提供者和提供者客户端为数据提供一个一致的,标准的接口,也处理进程间的联系和数据安全访问。

提供者向应用程序呈现数据就像一个或多张表,就像是在关系数据库里一样。一行显示一些数据类型的实例,列的每行显示实例数据集合的独立数据。

一个应用程序通过客户类ContentResolver访问内容提供者的数据。这个函数有一个在提供者对象里同名的函数,是一个ContentProvider子类的实例。函数ContentResolver提供”CRUD”的基础(创建,获取,更新,删除)函数。

拥有提供者的应用程序进程的ContentResolver对象和ContentProvider对象可以自动处理进程间的数据交换。

简而言之:ContentProvider以表的形式,向客户端提供了访问数据的API,通过ContentResolver实现进程间的数据共享。而进程间数据的共享通过uri来实现。

实现效果:



这里主要的实现方法:

private void getData() {
ArrayList<UserModel> data = new ArrayList<>();
//获取ContentResolver对象
ContentResolver cr = getContentResolver();
//查询contacts表
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (!cursor.moveToFirst()) {
Toast.makeText(this, "暂无内容", Toast.LENGTH_LONG).show();
}

while (cursor.moveToNext()) {
//获取联系人名字
UserModel model = new UserModel();
int nameId = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
String name = cursor.getString(nameId);
model.setName(name);
//获取电话号码
Cursor phoneCursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID)), null, null);
//可能有多个号码
if (phoneCursor.moveToNext()) {
String phone = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
model.setPhone(phone + ";");
}
//关闭cursor
phoneCursor.close();
data.add(model);
}
//关闭cursor
cursor.close();
adapter.getData(data);
}


注意点:cursor用完之后必须要close;这里通过nameId去查的是查不到手机号码的。

其他点注释 很清楚。

权限:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>


这里需要注意一下

需要做6.0动态权限处理,以上做过论述,处理方式

绑定权限

PermissionGen.with(MainActivity.this)
.addRequestCode(100)
.permissions(
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_CONTACTS)
.request();


@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
PermissionGen.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}

@PermissionSuccess(requestCode = 100)
public void doSomething() {
getData();
}

@PermissionFail(requestCode = 100)
public void doFailSomething() {
Toast.makeText(this, "Contact permission is not granted", Toast.LENGTH_SHORT).show();
}


添加依赖:

compile 'com.lovedise:permissiongen:0.0.6'


ContentProvider要点就是这么多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息