4

連絡先の表示名を照会しようとしています:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case REQ_CODE_PICK_CONTACT:
        if (resultCode == Activity.RESULT_OK) {
            Uri contactUri = data.getData();

            ContentResolver cr = getActivity().getContentResolver();
            Cursor c = cr.query(contactUri, null, null, null, null);

            if (c != null && c.moveToFirst()) {
                //get the contact name
            }
        }
        break;
    }
}

ここに問題があります:

一部の連絡先では、カーソルが空に戻りますが、その理由がわかりません。の値を確認しましたcontactUri。次のようになります:content://com.android.contacts/data/3032

Uriは、私が試したすべてのタイプの連絡先(Facebook、Google、電話など)で同じように見えます。

一部の連絡先では、カーソルが結果を返します。これは適切であり、名前を抽出できます。しかし、他の人にとっては、ContentUriがまったく同じであるにもかかわらず、それはどういうわけか空です。これはIntent.getData()から発生しました。

この奇妙な問題と関係があるかもしれないいくつかの事実はここにあります:

  • 空のカーソルを持つすべての連絡先はFacebookの連絡先です。ウリは上のように見えます。

  • すべてのFacebookの連絡先がこれを引き起こすわけではありません:私はHTC One Xを持っています。これは、電話帳で、OSが連絡先間の関係を見つけた場合(たとえば、GmailアカウントとFacebookアカウントの類似の電話番号を検出した場合)に連絡先を「リンク」できます。 、それは私がそれらの間で「リンク」することを提案します)。「リンク」されていないFacebookの連絡先のみが空になります。

今はアイデアが足りません。誰かが以前にこれに遭遇したことがありますか?

前もって感謝します。

4

1 に答える 1

1

HTC Incredible S でも同じ問題が発生したため、HTC 電話の問題であると思われます。dataとにかく、私が最終的に使用した回避策は、意図的に返されたバンドルから電話番号を取得することです。

final String phoneNumber = data.getStringExtra("android.intent.extra.PHONE_NUMBER");

その時点で、「逆ロジック」を実行して、PhoneLookupを使用して連絡先の他のデータを取得する必要があります。

于 2013-01-14T23:43:26.790 に答える