編輯:關於android開發
Android入門中,記錄學習中的遇到的問題和一些個人總結。
聯系人數據庫路徑為:/data/data/com.android.providers.contacts/database/contacts2.db
權限問題:安卓6.0以上只是在XML中寫權限還不夠,代碼中也需要寫。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 10);
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 10) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//有權限,可以進行獲取聯系人操作
} else {
Toast.makeText(this, "您阻止了權限", Toast.LENGTH_SHORT).show();
}
}
第一種方法,代碼也最簡潔,SORT_KEY_PRIMARY還能按中文名字拼音排序,個人推薦:
1 Cursor cursor = context.getContentResolver().query(Phone.CONTENT_URI, new String[]{Phone.DISPLAY_NAME, Phone.NUMBER}, null, null, Phone.SORT_KEY_PRIMARY); 2 if (cursor != null) { 3 while (cursor.moveToNext()) { 4 ContactBean contact = new ContactBean(); 5 contact.setName(cursor.getString(0)); 6 contact.setPhone(cursor.getString(1)); 7 lists.add(contact); 8 } 9 cursor.close(); 10 }
第二種方法:可根據聯系人id獲取相關信息
1 Uri uri = Uri.parse("content://com.android.contacts/contacts"); 2 ContentResolver resolver = context.getContentResolver(); 3 Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null); 4 if (cursor != null && cursor.getCount() > 0){ 5 while (cursor.moveToNext()) { 6 Contact contact = new Contact(); 7 int contactId = cursor.getInt(0); 8 uri = Uri.parse("content://com.android.contacts/contacts/" + contactId + "/data"); 9 Cursor cursor1 = resolver.query(uri, new String[]{"mimetype", "data1"}, null, null, null); 10 if (cursor1 != null && cursor1.getCount() > 0){ 11 while (cursor1.moveToNext()) { 12 String mimeType = cursor1.getString(0); 13 String data1 = cursor1.getString(1); 14 if ("vnd.android.cursor.item/name".equals(mimeType)) { //是姓名 15 contact.setName(data1); 16 } else if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) { //手機 17 contact.setPhone(data1); 18 } 19 } 20 cursor1.close(); 21 lists.add(contact); 22 } 23 } 24 cursor.close(); 25 }
第三種方法:跟第二種方法比較,只有第二個uri不同,(PS:此方法有BUG,獲取到一部分人的數據為NULL,但聯系人總數是一樣的。據說是因為以前刪除過聯系人,本人手機未ROOT,也沒法看數據庫表的數據,希望有人能給個解釋)
1 Uri uri4Contacts = Uri.parse(ContactsContract.AUTHORITY_URI + "/contacts"); 2 Uri uri4Data = Uri.parse(ContactsContract.AUTHORITY_URI + "/data"); 3 List<Contact> lists = new ArrayList<>(); 4 Cursor cursor1 = context.getContentResolver().query(uri4Contacts, new String[]{"_id"}, null, null, null); 5 if (cursor1.moveToNext()) { 6 Contact contact = new Contact(); 7 String id = cursor1.getString(0); 8 Cursor cursor2 = context.getContentResolver().query(uri4Data, new String[]{"data1", "mimetype"}, "row_contact_id = ?", new String[]{id}, null); 9 if (cursor2.moveToNext()) { 10 String data = cursor2.getString(0); 11 String mimetype = cursor2.getString(1); 12 if (mimetype.equals("vnd.android.cursor.item/name")) { 13 contact.setName(data); 14 } else if (mimetype.equals("vnd.android.cursor.item/phone_v2")) { 15 contact.setPhone(data); 16 } 17 } 18 }
Android音頻開發之基礎知識介紹 先來點閒言碎語,前段時間我有一段感悟:Android開發,本身並不是一個可以走得多遠的方向,它只是一個平台,提供了許多封裝好的A
Android 手機衛士--9patch圖,本文主要介紹9patch圖 *.9.png:android手機上,可以按需求自動拉伸的圖片 本文地址:http:/
Android logcat,androidlogcatlogcat是Android中一個命令行工具,可以用於得到程序的log信息。 基本命令 logcat使用方法如下所
自定義View等待旋轉,自定義view等待效果圖 1 string.xml <string name=default_progressbar>D