2011-06-27 16 views
3

ガー、もう一つのシナリオはここでは簡単なことが非常に時間がかかり痛いことが分かっています。私は連絡先プロバイダを照会するためにこれを使用してい連絡先の写真を抽出する

private Cursor getContacts(){ 
Uri uri = ContactsContract.Contacts.CONTENT_URI; 
String[] projection = new String[] { 
    ContactsContract.Contacts._ID, 
    ContactsContract.Contacts.DISPLAY_NAME, 
      ContactsContract.Contacts.PHOTO_ID 
    }; 
    ...... 
    return managedQuery(uri, projection, selection, selectionArgs, sortOrder); 
} 

これは正常に動作し、連絡先の名前を検索し、連絡先の一握りにそれは私があると仮定しPHOTO_IDフィールドの数値のIDを示し、私が要求しているPHOTO_ID。しかし、そのIDをこのメソッドにプッシュしてビットマップを抽出し、すべての接触で失敗し、毎回ストリームがヌルです。私は、いくつかのAndroidの連絡先の写真を含む連絡先のセットに対してテストしています(私はFacebookの連絡先から写真を抽出するいくつかの問題があることを知っています)。

private Bitmap loadContactPhoto(long id) { 
    Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id); 
    InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, uri); 
    if (input == null) return null; 
    Bitmap bitmap = BitmapFactory.decodeStream(input); 
    return bitmap; 
} 

何が欠けていますか?

答えて

2

openContactPhotoInputStream()は連絡先のURIを取得し、PHOTO_ID列の代わりにContactsContract.Contacts._ID列を使用して呼び出すと、より良い結果が表示されます。

関連する議論の束をチェックアウトするいくつかのコードをここにあります:いくつかのケースでは、あなたが通過ロードされませんネイティブの連絡先アプリで写真を見ることができますことを

How do I load a contact Photo?

注コンテンツリゾルバ。例えばFacebookのようないくつかの同期情報は、連絡先アプリ自体でのみ使用されるようにフラグが立てられており、他のアプリにエクスポートされることはありません:-(

ただし、contactUriを使用すると、

+0

ありがとうございました!私の日を救ったのですが、誰かがどのようにしてフェイスブックの同期などからも抽出する方法を教えてくれますか? – bricklore

関連する問題