ContentProvide内容提供者
ContentProvider重点:
权限必须在清单文件中写
ContentProvider:内容提供者
ContentResolver:内容解析者
Uri:地址
图库Uri:MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
短信:Telephony.Sms.CONTENT_URI;
联系人:ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
音频: MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
视频:MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
内容解析者
读系统的文件要写读SD卡权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!--读SD卡-->
//读图库
@RequiresApi(api = Build.VERSION_CODES.O)
private void readPicture() {
ContentResolver resolver = getContentResolver();
//读图片的uri
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = resolver.query(uri, null, null, null,null);
final List<Map<String,Object>> lists=new ArrayList<>();
while (cursor.moveToNext()) {
String string = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.TITLE));
String data = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
HashMap<String, Object> map = new HashMap<>();
map.put("title",string);
map.put("data",data);
lists.add(map);
}
MyPirctureAdapter myPirctureAdapter = new MyPirctureAdapter(lists, this);
listView.setAdapter(myPirctureAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
}
});
}
读联系人权限:
<uses-permission android:name="android.permission.READ_CONTACTSD"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/> <!--读联系人-->
字段:ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME:姓名
ContactsContract.CommonDataKinds.Phone.NUMBER:电话
“phonebook_label”
private void readUser() {
//获得ContextResolver
ContentResolver resolver = getContentResolver();
//确定url和要查询的字段
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
//联系人,手机号
String[] strings={ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,"phonebook_label"
};
//执行查询并将结果遍历展现在listview中和存储到本地的数据库中
Cursor cursor = resolver.query(uri, strings, null, null, null);
list = new ArrayList<>();
while (cursor.moveToNext()) {
String phonebook_label = cursor.getString(cursor.getColumnIndex("phonebook_label"));
String s = phonebook_label + cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
HashMap<String, Object> map = new HashMap<>();
map.put("name",s);
map.put("phonenum",number);
list.add(map);
}
MyAdapter myAdapter = new MyAdapter(list, this);
listView.setAdapter(myAdapter);
}
读短信权限:
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/><!--读短信-->
字段:Telephony.Sms.BODY,
Telephony.Sms.ADDRESS,
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private void readMessage() {
ContentResolver contentResolver = getContentResolver();
Uri uri = Telephony.Sms.CONTENT_URI;
String[] strings={
Telephony.Sms.BODY,
Telephony.Sms.ADDRESS,
};
Cursor cursor = contentResolver.query(uri, strings, null, null, null);
//存到listview中,存到数据库中
List<Msm> lists=new ArrayList<>();
while (cursor.moveToNext()) {
String string = cursor.getString(cursor.getColumnIndex(Telephony.Sms.ADDRESS));
String string1 = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY));
lists.add(new Msm(string,string1));
}
MyAdapter2 myAdapter2 = new MyAdapter2(lists, this);
listView.setAdapter(myAdapter2);
}
Msm类:
class Msm {
private String address;
private String body;
public Msm() {
super();
}
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;
}
public Msm(String address, String body) {
this.address = address;
this.body = body;
}
@Override
public String toString() {
return "Msm{" +
"address='" + address + '\'' +
", body='" + body + '\'' +
'}';
}