十.Android ContentProvider 实例——获取联系人
来源:互联网 发布:淘宝c店装修尺寸 编辑:程序博客网 时间:2024/06/05 02:34
1.ContentProvider简述
- ContenttProvider(以下简称CP)是为了获取不同应用之间的数据而诞生的组件,并且官方为常见的一些数据提供了默认的CP。例如,联系人、短信等。
- CP的几点关键:
- Uri:是CP的标志符,是识别CP的唯一方式。
- ContentResolver:对CP进行操作的类。
- 权限:有时候操作一些地方需要一些权限。
2.获取联系人实现思路
3.具体实现
3.1 申请权限
android6.0不仅要在AndroidManifest.xml中静态申请,还需要在代码中进行动态申请。
- 静态申请
在AndroidManifest.xml中进行申请。
<manifest ...> <uses-permission android:name="android.permission.READ_CONTACTS" /></manifest>
动态申请
动态申请的流程为:发起申请和申请结果。发起申请:
主要使用requestPermissions(permission名字的数组,整型的自定义reques code)方法
注:- 什么时候进行动态申请呢?版本大于等于6.0且当前页面没有这个权限。
- request code 为自定义数值,例子中我定义了一个常量int–PERMISSIONS_REQUEST_READ_CONTACTS,这个是为了在查看申请结果时判定用的。
private void showContacts() { //检验是否版本大于6.0,当前页面是否有这个权限 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { //发起申请 requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS); } else { //低版本直接运行,跳过动态申请。 readContacts(); }}
申请结果
重写onRequsetPermissionResult(int requestCode,String[] permissions,int[] grantResults)方法。
注:- 在此返回的requestCode是发送申请中自定义的requestCode,permissions String数组也是发送申请中的,grantResults返回的有两种PackageManager.PERMISSION_**GRANTED**和PackageManager.PERMISSIO
N_**DENIED**@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 申请权限通过 showContacts(); } else { Toast.makeText(this, "只有通过了权限申请才能查看", Toast.LENGTH_SHORT).show(); } }}
- 在此返回的requestCode是发送申请中自定义的requestCode,permissions String数组也是发送申请中的,grantResults返回的有两种PackageManager.PERMISSION_**GRANTED**和PackageManager.PERMISSIO
3.2 获取联系人
- 主要使用ContentResolver进行操作
使用游标来对ContentResolver获取的数据进行操作。
private void readContacts(){ Cursor cursor=null; try{ cursor=getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null ); while(cursor.moveToNext()){ String displayName =cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String number=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); contactsList.add(displayName+"\n"+number); } }catch (Exception e){ e.printStackTrace(); }finally { if(cursor!=null){ cursor.close(); } } }
3.3 页面显示
- List->adapter->ListView
ListView contactsView;ArrayAdapter<String> adapter;List<String> contactsList =new ArrayList<>();...adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,contactsList);contactsView.setAdapter(adapter);
4.结果
5.日常福利
- Github源码
0 0
- 十.Android ContentProvider 实例——获取联系人
- android-ContentProvider获取联系人信息
- Android-contentprovider 获取手机联系人
- android系统ContentProvider——联系人
- Android—ContentProvider读取系统联系人
- android组件之ContentProvider(三)——获取联系人&&其他
- Android -ContentProvider之获取手机联系人
- Android ContentProvider+获取系统联系人小Demo
- Android 利用ContentProvider获取联系人信息
- Android:ContentProvider获取手机联系人列表
- Android ContentProvider 获取和插入联系人
- Android ContentProvider(获取手机联系人)
- ContentProvider获取联系人信息
- ContentProvider如何获取联系人
- ContentProvider获取手机联系人
- ContentProvider获取手机联系人
- 获取手机联系人(Contentprovider)
- Android—获取手机联系人
- JSON全解析
- HDU 5875 Function 【倍增】 (2016 ACM/ICPC Asia Regional Dalian Online)
- 15款最佳的响应式 Web 设计测试工具
- iOS自定义实现日历控件
- 子类调用父类的构造函数
- 十.Android ContentProvider 实例——获取联系人
- vim-进阶
- QWidget中嵌入win32 window
- 版本更新
- js常用操作
- java多线程回调方法的理解
- 笔记本无法连接显示器 Windows 10 - Your PC can't project to another screen
- 十一.Android数据持久化方法之一——sharedPreferences
- iOS蓝牙控制模型