訪問手機通訊錄

1.在AndroidManifest.xml設置訪問通訊的權限:

//添加訪問通訊錄的權限

    <uses-permission android:name="android.permission.READ_CONTACTS"/>

2.模擬獲取通訊錄的名稱與電話號碼,然後用ListView進行顯示,現在xml文件中添加ListView,

    <ListView
        android:id="@+id/contact_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ></ListView>

3.在Activity中,配置ListView(核心代碼)

    private ListView listView;
    private ArrayAdapter<String> adapter;  //適配器
    List<String> contactList = new ArrayList<String>();  //通訊獲取的數據

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView)findViewById(R.id.contact_listview);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contactList);
        listView.setAdapter(adapter);

        /*獲取通訊錄數據
        * 1.先判斷是否已經有讀取通訊錄的權限
        * 2.如果沒有的話,詢問用戶,如果有的話,直接讀取通訊錄的數據*/

        //1
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED ) {
            //未獲得權限,詢問用戶
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1);
        } else {
            //已經權限
            readContacts();
        }
    }

//讀取通訊錄數據
    public void readContacts() {
        Cursor contactCursor = null;
        try {
            contactCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
            if ( contactCursor != null ) {
                while (contactCursor.moveToNext()) {
                    //讀取通訊錄數據
                    String name = contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    String phoneNumber = contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    contactList.add(name + "\n" + phoneNumber);
                }
                adapter.notifyDataSetChanged();  //刷新ListView
            }
        }catch ( SecurityException e) {
            e.printStackTrace();
        }
    }

//權限選擇結果回調
    @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, "你不能讀取用戶通訊錄", Toast.LENGTH_SHORT).show();
                }
            }
                break;

            default:
                break;
        }
    }

ok

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章