android组件之ContentProvider(三)——获取联系人&&其他
2017-02-06 16:21
471 查看
查询:
添加
ContentProvider也可获取多媒体内容
监听ContentProvider数据变化
search.setOnClickListener(new OnClickListener() { @Override public void onClick(View source) { // 定义两个List来封装系统的联系人信息、指定联系人的电话号码、Email等详情 final ArrayList<String> names = new ArrayList<>(); final ArrayList<ArrayList<String>> details = new ArrayList<>(); // 使用ContentResolver查找联系人数据 Cursor cursor = getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null); // 遍历查询结果,获取系统中所有联系人 while (cursor.moveToNext()) { // 获取联系人ID String contactId = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts._ID)); // 获取联系人的名字 String name = cursor.getString(cursor.getColumnIndex( ContactsContract.Contacts.DISPLAY_NAME)); names.add(name); // 使用ContentResolver查找联系人的电话号码 Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); Log.e("mrpeng", "selection: "+ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId ); ArrayList<String> detail = new ArrayList<>(); // 遍历查询结果,获取该联系人的多个电话号码 while (phones.moveToNext()) { // 获取查询结果中电话号码列中数据 String phoneNumber = phones.getString(phones .getColumnIndex(ContactsContract .CommonDataKinds.Phone.NUMBER)); detail.add("电话号码:" + phoneNumber); } phones.close(); // 使用ContentResolver查找联系人的E-mail地址 Cursor emails = getContentResolver().query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email .CONTACT_ID + " = " + contactId, null, null); // 遍历查询结果,获取该联系人的多个E-mail地址 while (emails.moveToNext()) { // 获取查询结果中E-mail地址列中数据 String emailAddress = emails.getString(emails .getColumnIndex(ContactsContract .CommonDataKinds.Email.DATA)); detail.add("邮件地址:" + emailAddress); } emails.close(); details.add(detail); } cursor.close();
添加
add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 获取程序界面中的三个文本框的内容 String name = ((EditText) findViewById(R.id.name)) .getText().toString(); String phone = ((EditText) findViewById(R.id.phone)) .getText().toString(); String email = ((EditText) findViewById(R.id.email)) .getText().toString(); // 创建一个空的ContentValues ContentValues values = new ContentValues(); // 向RawContacts.CONTENT_URI执行一个空值插入 // 目的是获取系统返回的rawContactId Uri rawContactUri = getContentResolver().insert( ContactsContract.RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); // 设置内容类型 values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); // 设置联系人名字 values.put(StructuredName.GIVEN_NAME, name); // 向联系人URI添加联系人名字 getContentResolver().insert(android.provider.ContactsContract .Data.CONTENT_URI, values); values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); // 设置联系人的电话号码 values.put(Phone.NUMBER, phone); // 设置电话类型 values.put(Phone.TYPE, Phone.TYPE_MOBILE); // 向联系人电话号码URI添加电话号码 getContentResolver().insert(android.provider.ContactsContract .Data.CONTENT_URI, values); values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); // 设置联系人的E-mail地址 values.put(Email.DATA, email); // 设置该电子邮件的类型 values.put(Email.TYPE, Email.TYPE_WORK); // 向联系人E-mail URI添加E-mail数据 getContentResolver().insert(android.provider.ContactsContract .Data.CONTENT_URI, values); Toast.makeText(MainActivity.this, "联系人数据添加成功", Toast.LENGTH_SHORT).show(); } });
ContentProvider也可获取多媒体内容
add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 创建ContentValues对象,准备插入数据 ContentValues values = new ContentValues(); values.put(Media.DISPLAY_NAME, "jinta"); values.put(Media.DESCRIPTION, "金塔"); values.put(Media.MIME_TYPE, "image/jpeg"); // 插入数据,返回所插入数据对应的Uri Uri uri = getContentResolver().insert( Media.EXTERNAL_CONTENT_URI, values); // 加载应用程序下的jinta图片 Bitmap bitmap = BitmapFactory.decodeResource( MainActivity.this.getResources(), R.drawable.jinta); System.out.println("======"); OutputStream os = null; try { // 获取刚插入的数据的Uri对应的输出流 os = getContentResolver().openOutputStream(uri); // ① // 将bitmap图片保存到Uri对应的数据节点中 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os); os.close(); } catch (IOException e) { e.printStackTrace(); } } });
view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 清空names、descs、fileNames集合里原有的数据 names.clear(); descs.clear(); fileNames.clear(); // 通过ContentResolver查询所有图片信息 Cursor cursor = getContentResolver().query( Media.EXTERNAL_CONTENT_URI, null, null, null, null); while (cursor.moveToNext()) { // 获取图片的显示名 String name = cursor.getString(cursor .getColumnIndex(Media.DISPLAY_NAME)); // 获取图片的详细描述 String desc = cursor.getString(cursor .getColumnIndex(Media.DESCRIPTION)); // 获取图片的保存位置的数据 byte[] data = cursor.getBlob(cursor .getColumnIndex(Media.DATA)); // 将图片名添加到names集合中 names.add(name); // 将图片描述添加到descs集合中 descs.add(desc); // 将图片保存路径添加到fileNames集合中 fileNames.add(new String(data, 0, data.length - 1)); }
监听ContentProvider数据变化
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 为content://sms的数据改变注册监听器 getContentResolver().registerContentObserver( Uri.parse("content://sms"), true, new SmsObserver(new Handler())); } // 提供自定义的ContentObserver监听器类 private final class SmsObserver extends ContentObserver { public SmsObserver(Handler handler) { super(handler); } public void onChange(boolean selfChange) { // 查询发送箱中的短信(处于正在发送状态的短信放在发送箱) Cursor cursor = getContentResolver().query( Uri.parse("content://sms/outbox") , null, null, null, null); // 遍历查询得到的结果集,即可获取用户正在发送的短信 while (cursor.moveToNext()) { StringBuilder sb = new StringBuilder(); // 获取短信的发送地址 sb.append("address=").append(cursor .getString(cursor.getColumnIndex("address"))); // 获取短信的标题 sb.append(";subject=").append(cursor .getString(cursor.getColumnIndex("subject"))); // 获取短信的内容 sb.append(";body=").append(cursor .getString(cursor.getColumnIndex("body"))); // 获取短信的发送时间 sb.append(";time=").append(cursor .getLong(cursor.getColumnIndex("date"))); System.out.println("发送短信:" + sb.toString()); } } }
相关文章推荐
- Android 笔记:自定义view的属性TypedArray的使用方法
- android开发-路漫漫其修远兮
- 特殊布局的对话框
- 安卓设置横竖屏及生命周期问题
- 设置动画结束的监听事件
- Android::整理基础之—— startActivityForResult相关
- Android RecyclerView使用
- AndroidSIM卡开机初始化(6.0版本)
- 模仿微博ViewPage指示器滑动效果的自定义View
- android 问题解决方法
- android 广播的注册于反注册时机
- Weex入门教程之2,Android Studio安装Weex插件
- android ViewPager 解决自动滑动到最后一页,继续滑动的效果问题
- [源码]Android-Architecture及对MVP的理解
- View的工作原理(二)
- audio系列之MediaButton--基于Android7.0
- 《Android群英传》读书笔记5.Android Scroll分析
- AndroidStudio使用技巧
- Android硬件抽象层(HAL)深入剖析(二)
- Android Studio配置正式签名和debug签名