安卓四大组件-内容提供器-2.1_项目实战-读取系统联系人

来源:互联网 发布:一年java工作经验 编辑:程序博客网 时间:2024/04/29 06:03

基础知识就不多说了,直接上源代码吧!有什么不懂得请看我发的内容提供器第二篇!代码里有丰富的注释

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <ListView        android:id="@+id/contact_view"        android:layout_width="match_parent"        android:layout_height="match_parent" /></LinearLayout>


package com.example.a14468.contactstest;import android.Manifest;import android.content.pm.PackageManager;import android.database.Cursor;import android.provider.ContactsContract;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    ArrayAdapter<String> adapter;    List<String> contactsList = new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ListView contactsView = (ListView) findViewById(R.id.contact_view);//获取ListView实例        //设置好适配器        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList);        contactsView.setAdapter(adapter);        //调用运行权限的处理逻辑        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {            ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.READ_CONTACTS }, 1);        } else {            readContacts();//读取联系人的信息        }    }    private void readContacts() {        Cursor cursor = null;        try {            //查询联系人            // CommonDataKinds.Phone.类提供了CONTENT_URI常量,这个常量是使用Uri.parse()方法去解析出来的结果            cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);            if (cursor != null){//对Cursor进行遍历                while (cursor.moveToNext()){                    //获取联系人姓名                    //联系人姓名这一列对应的常量是ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME                    //联系人手机好这一列对应的常量是ContactsContract.CommonDataKinds.Phone.NUMBER                    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);                }                //间拼接的数据添加到ListView的数据源里,并通知刷新一下ListView.                adapter.notifyDataSetChanged();            }        }catch (Exception e){            e.printStackTrace();        }finally {            if (cursor != null){                //最后将Cursor对象关闭,                // 记得最后申明权限  <uses-permission android:name="android.permission.READ_CONTACTS"/>                cursor.close();            }        }    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        switch(requestCode){            case 1:                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){                    readContacts();                }else {                    Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();                }                break;            default:        }    }}

0 0
原创粉丝点击