AndroidのG 連絡先ディレクトリ(またはExchangeのグローバルアドレス一覧)からアドレスを読み込もうとしています。このディレクトリは完全なContactsContractを実装するのではなく、例えばCONTENT_FILTER_URIと他にもいくつかあります。連絡先の詳細、電話番号、電子メールアドレスを読み込むことができます。しかし、私は郵便番号を読み込むことができません。連絡先IDを取得するには、次のコードを使用します。連絡先ディレクトリからアドレスを読み込む方法は?
// The directory I use in this example has the number 3:
String directoryId = "3";
// A contact with the name "Test" is searched in directory "3":
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI, Uri.encode("Test")).buildUpon()
.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, directoryId)
.build();
// The id of the first result is loaded:
Cursor c = cr.query(uri, new String[]{ContactsContract.Contacts._ID}, null, null, null);
c.moveToNext();
String id = c.getString(0);
その後、私は "id"の最初の連絡先のIDを持っています。今、私はその連絡先のすべての郵便番号をロードしたいと思います。しかし、このコードでは、カーソルの代わりにnullを返しますが、私はのDirectoryID「3」を使用する場合のみ:
Uri uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI.buildUpon()
.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, directoryId)
.build();
Cursor c = cr.query(uri, new String[]{ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS}, ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID+"=?", new String[]{id}, null);
c.moveToNext();
c.getString(0);
をそれのDirectoryID「0」のために正常に動作します。だから、G Suiteの連絡先ディレクトリはContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URIを実装していないようです。しかし、Androidの連絡先アプリはその連絡先のアドレスを読み込むことができます。
連絡先の「StructuredPostal」オブジェクトを取得する正しい方法は、連絡先ディレクトリからですか?
それは標準のContactsContacts DBにありますか?すなわち、「Uri uri = StructuredPostal」である。CONTENT_URI; ' – marmor
はい、私はそれを試みました。しかし、content-idはデフォルトのディレクトリには存在しません。 "DIRECTORY_PARAM_KEY"を省略してStructuredPostal.CONTENT_URIにアクセスするとカーソルが表示されますが、 "c.moveToNext()"はfalseを返します。つまり、content-idの行はありません。これはおそらく、 "DIRECTORY_PARAM_KEY"を省略すると、デフォルトディレクトリが照会され、そのディレクトリにその連絡先に関する情報が含まれていないためです。ディレクトリ "3"(G Suite)のみが連絡先を知っています。 – Dominique