連絡先データへのアクセス
-
26-09-2019 - |
質問
残念ながら、私は電話帳に約500の連絡先があり、何らかの理由でThunderbirdと同期した後、ディスプレイ名はランダムであり、最初は最初です。だから、私は簡単なウィジェットをまとめて、ディスプレイ名が最初に続くようにやり直すだけだと思った。私が使用するコードは以下ですが、最後 /最初の値を取得していません。カーソルのキーは存在します(data1、data2)が、値はそれぞれ「1」とnullでした。何か案は?
Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext() != false) {
String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String fname = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
String lname = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
if (lname != null && lname.length() > 0) {
String sDName = lname + "," + fname;
ContentValues values = new ContentValues();
values.put(ContactsContract.Contacts.DISPLAY_NAME, sDName);
getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Contacts._ID+"=", new String[] {id});
}
}
解決
ContactScontract.Dataには、共有テーブルに、郵便番号、電話番号、電子メール、Webサイト、写真など、さまざまな種類のすべての情報が含まれています。
興味のある情報を含む行を除外する必要があります。
クエリで、where句を追加します。
query(ContactsContract.Data.CONTENT_URI, Data.MIMETYPE + "=?",
new String[]{StructuredName.CONTENT_ITEM_TYPE}, null, null);
のドキュメントを参照してください contactscontract.data
所属していません StackOverflow