2012-04-18 20 views
2

私は、検索URIを使用して連絡先の画像を取得しようとしています。LOOKUP_URIを使用してAndroid(API 8)の連絡先の写真を取得

Cursor c = context.getContentResolver().query(contactLookupUri, 
       new String[] { ContactsContract.Contacts.DISPLAY_NAME }, null, 
       null, null); 

しかし、私は写真を取得する方法を見つけることができませんでした: 私はこのコードを使用してDISPLAY_NAMEを得て成功しました。

InputStream input = ContactsContract.Contacts 
        .openContactPhotoInputStream(context.getContentResolver(), 
          contactUri); 

おかげで、 ヨエル:Photo.PHOTOオプションは、私が使用して、同様に動作しませんでしたInputStreamを使用して、それを取得しようとしているAPIのために有効ではありません(おそらく、私はそこに何かを間違っていました)

答えて

2

結局私はでそれを解決する参照してください。連絡先IDを取得し、inputStreamを使用しています:

public static Uri getContactLookupUri(String contactLookupKey) { 
     return Uri.withAppendedPath(
       ContactsContract.Contacts.CONTENT_LOOKUP_URI, contactLookupKey); 
    } 

public static Bitmap getContactImage(Context context, String contactLookupKey) { 

    long contactId; 

    try { 
     Uri contactLookupUri = getContactLookupUri(contactLookupKey); 
     Cursor c = context.getContentResolver().query(contactLookupUri, 
       new String[] { ContactsContract.Contacts._ID }, null, null, 
       null); 
     try { 
      if (c == null || c.moveToFirst() == false) { 
       return null; 
      } 
      contactId = c.getLong(0); 
     } finally { 
      c.close(); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 

    Uri contactUri = ContentUris.withAppendedId(
      ContactsContract.Contacts.CONTENT_URI, contactId); 
    InputStream input = ContactsContract.Contacts 
      .openContactPhotoInputStream(context.getContentResolver(), 
        contactUri); 

    if (input != null) { 
     return BitmapFactory.decodeStream(input); 
    } else { 
     return null; 
    } 
} 
+0

「contactLookupKey」とは何ですか? – SpicyWeenie

+0

lookupKeyの説明については、次のURLを参照してください。http://developer.android.com/resources/articles/contacts.html – yoel

1

以下の機能あなたのcontact_idの画像URIを返す

/** 
* @return the photo URI 
*/ 
public Uri getPhotoUri() { 
    try { 
     Cursor cur = this.ctx.getContentResolver().query(
       ContactsContract.Data.CONTENT_URI, 
       null, 
       ContactsContract.Data.CONTACT_ID + "=" + this.getId() + " AND " 
         + ContactsContract.Data.MIMETYPE + "='" 
         + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null, 
       null); 
     if (cur != null) { 
      if (!cur.moveToFirst()) { 
       return null; // no photo 
      } 
     } else { 
      return null; // error in cursor process 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
    Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long 
      .parseLong(getId())); 
    return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
} 

はまた、このLINK

+0

こんにちは、私は連絡先IDを持っていませんが、私はlookupKeyを持っています。そして、私は実際にあなたのソリューションを理解していない、それはあなたが質問の結果を全く使用していないようだからです。 – yoel

+0

@yoelあなたのソースを投稿できますか?私は理解していない "Uri contactLookupUri = getContactLookupUri(con​​tactLookupKey);" – SpicyWeenie

関連する問題