1. 程式人生 > >讀取手機聯絡人,顯示到佈局裡

讀取手機聯絡人,顯示到佈局裡

  • 讀取聯絡人在 Android 6.0 以上要動態獲取許可權
  • SDK 小於 23 要在 AndroidManifest.xml 註冊許可權

示例效果:在這裡插入圖片描述

AndroidManifest.xml

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

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:onClick="btnQuery"
        android:text="查詢聯絡人"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <ListView
        android:id="@+id/LV"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {


    private ListView listView;
    private ContentResolver contentResolver;

    List<String> datas = new ArrayList<>();
    Cursor cursor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = findViewById(R.id.LV);
        contentResolver = getContentResolver();
    }

    // 檢查許可權
    public void btnQuery(View view) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
                != PackageManager.PERMISSION_GRANTED
                ) {
            if (Build.VERSION.SDK_INT >= 23) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 123);

            }
        } else {
            // 查詢所有聯絡人
            requestDatas();
        }


    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 123 && ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
            cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
            requestDatas();
        }
    }

    private void requestDatas() {
        datas.clear();
        cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        if (cursor != null) {
            while (cursor.moveToNext()) {
                int id = cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
                String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                datas.add("id:" + id + " - 姓名:" + displayName + " - 電話:" + number + " ");
            }
            Toast.makeText(this, "" + datas.size(), Toast.LENGTH_SHORT).show();
            cursor.close();
            listView.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, datas));
        }
    }
}