第9天ContentProvider内容提供者
ContentProvider
一.ContentProvider介绍:
1.ContentProvider内容提供者(四大组件之一)主要用于在不同的应用程序之间实现数据共享的功能。
2.技能get点:
(1)访问系统自带的内容提供者(******)
手机联系人/音频/视频/图库/短信/系统设置
(2)自己写内容提供者
3.2个重要的类
(1)ContentProvider:内容提供者
(2)ContentResolver:内容索要方
二.获取手机联系人,展现在ListView中并存储到数据库中
(1)添加获取手机联系人的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
(2)获得手机联系人,展现在ListView中 并将信息存储到数据库中
uri:ContactsContract.CommonDataKinds.Phone.CONTENT_URI
字段:ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME:姓名
ContactsContract.CommonDataKinds.Phone.NUMBER:电话
//获取手机联系人
public void click1(View view) {
//TODO 1:获得ContentResolver
ContentResolver resolver = getContentResolver();
//TODO 2:确定uri和要查询的字段
Uri uri= ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] strs={ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER};
//TODO 3:执行查询并将结果遍历展现在ListView中和存储到本地的数据库中
Cursor cursor=resolver.query(uri,strs,null,null,null);
ArrayList<Phone> list=new ArrayList<>();
while(cursor.moveToNext()){
String name=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
list.add(new Phone(name,number));
//将每条记录存储到自己的数据库中
}
//将list集合中的数据展现在ListView中,此处省略
}
class Phone{
private String name;
private String number;
public Phone(String name, String number) {
this.name = name;
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
三.获取手机短信
(1)添加获取手机短信的权限
<uses-permission android:name="android.permission.READ_SMS" />
(2)获得短信内容,展现在ListView中 并将信息存储到数据库中
uri:Telephony.Sms.CONTENT_URI
字段:Telephony.Sms.ADDRESS 地址 Telephony.Sms.BODY 内容
//获取短信
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public void click2(View view) {
ContentResolver resolver = getContentResolver();
Uri uri= Telephony.Sms.CONTENT_URI;
String[] strs={Telephony.Sms.BODY,Telephony.Sms.ADDRESS};
Cursor cursor=resolver.query(uri,strs,null,null,null);
//第一种ListView 中 第二种 :存到数据库
ArrayList<Msm> list=new ArrayList<>();
while(cursor.moveToNext()){
String address=cursor.getString(cursor.getColumnIndex(Telephony.Sms.ADDRESS));
String body=cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY));
list.add(new Msm(address,body));
//执行insert语句
}
}
class Msm{
private String address;
private String body;
public Msm(String address, String body) {
this.address = address;
this.body = body;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}