Android练级塔Android知识Android开发经验谈

七.Android四大组件的ContentProvider实例—

2016-08-01  本文已影响1154人  KaelQ

1.ContentProvider简述

2.获取联系人实现思路

3.具体实现

3.1 申请权限

android6.0不仅要在AndroidManifest.xml中静态申请,还需要在代码中进行动态申请。

<manifest ...>
 <uses-permission android:name="android.permission.READ_CONTACTS" />
</manifest>
  1. 什么时候进行动态申请呢?版本大于等于6.0当前页面没有这个权限
  2. 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();
      }
  }
  1. 在此返回的requestCode是发送申请中自定义的requestCode,permissions String数组也是发送申请中的,grantResults返回的有两种PackageManager.PERMISSION_GRANTED和PackageManager.PERMISSIO
    N_DENIED
@Override
   public 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();
           }
       }
   }

3.2 获取联系人

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 页面显示

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.日常福利

上一篇下一篇

猜你喜欢

热点阅读