0

以下のような連絡先ピッカーを使用して、連絡先の ID を取得しています。

public void pickContact() {
    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    intent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
    startActivityForResult(intent, PICK_CONTACT_REQUEST);
}

次に、これを使用して、上記で返された uri から連絡先 ID を取得します。そしてそれを参考に保管してください。

public static long getContactIdByUri(Context context, Uri uri)
{
    Log.d(TAG, uri.toString());
    String[] projection = { Contacts._ID };
    Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
    try
    {
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(Contacts._ID);
        long id = -1;

        if(idx != -1)
        {
            id = cursor.getLong(idx);
        }
        return id;
    }
    finally
    {
        cursor.close();
    }
}

後でテキスト メッセージが届くと、電話番号を取得し、それに基づいて、次の方法で連絡先 ID を検索しようとします。

public static long getContactIdByPhoneNumber(Context context, String phoneNumber) {
    ContentResolver contentResolver = context.getContentResolver();
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
    String[] projection = new String[] { PhoneLookup._ID };
    Cursor cursor = contentResolver.query(uri, projection, null, null, null);
    if (cursor == null) {
        return -1;
    }
    int idx = cursor.getColumnIndex(PhoneLookup._ID);
    long id = -1;
    if(cursor.moveToFirst()) {
        id = cursor.getLong(idx);
    }
    if(cursor != null && !cursor.isClosed()) {
        cursor.close();
    }
    return id;
}

問題は、これら 2 つの ID が一致しないことです。

したがって、基本的に問題は、PhoneLookup.CONTENT_FILTER_URI で電話番号を検索するときに一致する連絡先ピッカーから ID を取得する方法です。連絡先に関する追加情報を取得するには、どちらを使用できますか?

4

1 に答える 1