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