什么是Content Provider
- 应用程序间共享数据的一种方式
- 为存储和获取数据提供了统一的接口
- Android为常见的一些数据提供了默认的ContentProvider
- Uri : 通用资源标识符
创建和使用Content Provider的步骤:
图片从视频网上copy的
下面写一个利用Content Provider 读取手机通讯录联系人姓名,并将名字显示在TextView中
xml代码
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Demo01">
<TextView
android:id="@+id/module_act_people_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</android.support.constraint.ConstraintLayout>
Java代码, 里面该有的都注释了
public class Demo01 extends AppCompatActivity {
private TextView people_tv;
//希望获得姓名(通讯录内的姓名)
private String columns = ContactsContract.Contacts.DISPLAY_NAME;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo01);
people_tv = findViewById(R.id.module_act_people_tv);
//将联系人信息显示出来
people_tv.setText(getQueryData());
//添加访问系统通讯录权限
//<uses-permission android:name="android.permission.READ_CONTACTS" />
}
private CharSequence getQueryData(){
//用于保存获取的联系人
StringBuilder stringBuilder = new StringBuilder();
ContentResolver resolver = getContentResolver();
//查询记录
Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null, null);
//获取姓名记录的索引值
int displayNameIndex = cursor.getColumnIndex(columns);
//迭代获取索引
for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){
String displayName = cursor.getString(displayNameIndex);
stringBuilder.append(displayName+"\n");
}
//关闭cursor
cursor.close();
return stringBuilder.toString();
}
}