ContentProvider 系统URI
案例一,获取手机联系人,展现在ListView中并存储到数据库中
(1) 添加获取手机联系人的权限
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
(2)创建一个javabead.用来存信息
public class Phone {
private String name;
private String number;
public Phone() {
}
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;
}
@Override
public String toString() {
return "Phone{" +
"name='" + name + '\'' +
", number='" + number + '\'' +
'}';
}
(3)获得手机联系添加到listview中,点击item实现拨打电话
public class MainActivity extends AppCompatActivity {
private List<Phone>list = new ArrayList<>();
private ListView listview;
private Uri uri;
private ContentResolver contentResolver1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
requestPermissions(new String[]{Manifest.permission.CALL_PHONE,Manifest.permission.WRITE_CONTACTS,Manifest.permission.READ_CONTACTS},100 );
}else{
resolverMethod();
}
}
/**
* 适配器
*/
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView==null){
convertView= LayoutInflater.from(MainActivity.this).inflate(R.layout.layout,parent,false);
viewHolder = new ViewHolder();
viewHolder.textView = convertView.findViewById(R.id.textview);
viewHolder.textView2 = convertView.findViewById(R.id.textview2);
convertView.setTag(viewHolder);
}else{
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.textView.setText(list.get(position).getName());
viewHolder.textView2.setText(list.get(position).getNumber());
return convertView;
}
class ViewHolder {
private TextView textView;
private TextView textView2;
}
}
private void resolverMethod() {
ContentResolver contentResolver = getContentResolver();
uri=ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
contentResolver1 = getContentResolver();
String[] strings = {ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME};
Cursor cursor = contentResolver.query(uri, strings, null, null, null);
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Phone phone1 = new Phone();
phone1.setName(name);
phone1.setNumber(number);
list.add(phone1);
Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show();
Phone phone = new Phone(name, number);
}
MyAdapter myAdapter = new MyAdapter();
listview.setAdapter(myAdapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + list.get(position).getNumber()));
startActivity(intent);
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==100 && grantResults[0]== PackageManager.PERMISSION_GRANTED){
resolverMethod();
}
}
}
案例二,获取手机短信
1.在清单文件中添加授权
<uses-permission android:name="android.permission.READ_SMS" />
2.获取短信信息
public class Main2Activity extends AppCompatActivity {
private EditText edittext;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String s=(String) msg.obj;
Toast.makeText(Main2Activity.this,s,Toast.LENGTH_SHORT).show();
edittext.setText(s);
}
};
private SmsObserver smsObserver;
private ContentResolver contentResolver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
edittext = (EditText) findViewById(R.id.edittext);
requestPermissions(new String[]{Manifest.permission.READ_SMS},100);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==100&& grantResults[0]== PackageManager.PERMISSION_GRANTED){
smsObserver = new SmsObserver(handler, this);
contentResolver=getContentResolver();
contentResolver.registerContentObserver(Telephony.Sms.CONTENT_URI,true,smsObserver);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
contentResolver.unregisterContentObserver(smsObserver);
}
}
案例三,获取手机所有的图片
1.权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
2.获取图片添加到GridView中,点击item显示大图对话框
public class Main3Activity extends AppCompatActivity {
private Button button1;
private GridView gvId;
private List<String> names = new ArrayList<>();
private List<String> descs = new ArrayList<>();
private List<String> fileNames = new ArrayList<>();
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
button1 = (Button) findViewById(R.id.button1);
gvId = (GridView) findViewById(R.id.gv_id);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},100);
}
});
gvId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
View view1 = getLayoutInflater().inflate(R.layout.layout3, null);
ImageView imageView = view1.findViewById(R.id.imageview);
imageView.setImageBitmap(BitmapFactory.decodeFile(fileNames.get(position)));
new AlertDialog.Builder(Main3Activity.this).setView(view1).setPositiveButton("确定",null).show();
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode==100 && grantResults[0]== PackageManager.PERMISSION_GRANTED){
allPic();
}
}
private void allPic() {
names.clear();
descs.clear();
fileNames.clear();
Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null,null);
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
String desc = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DESCRIPTION));
byte[] data = cursor.getBlob(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
descs.add(desc);
names.add(name);
Toast.makeText(Main3Activity.this,data.toString(),Toast.LENGTH_SHORT).show();
fileNames.add(new String(data,0,data.length-1));
}
myAdapter = new MyAdapter();
gvId.setAdapter(myAdapter);
}
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return fileNames.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView==null){
convertView = LayoutInflater.from(Main3Activity.this).inflate(R.layout.layout2,null);
viewHolder = new ViewHolder();
viewHolder.imageView=convertView.findViewById(R.id.imageview);
convertView.setTag(viewHolder);
}else{
viewHolder =(ViewHolder) convertView.getTag();
}
Glide.with(Main3Activity.this).load(fileNames.get(position)).into(viewHolder.imageView);
return convertView;
}
class ViewHolder{
ImageView imageView;
}
}
}