2011-06-28 17 views
4

でRawContact写真のURIを取得します。私は私が使用して連絡先の写真のURIを取得することができます知っているAndroidの

Uri person = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 
Uri photoUri = Uri.withAppendedPath(person, Contacts.Photo.CONTENT_DIRECTORY); 

はRawContactのために同じことを行う方法はありますか?

私が試した:

Uri person = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); 
Uri photoUri = Uri.withAppendedPath(person, Contacts.Photo.CONTENT_DIRECTORY); 

しかし、それは動作しません...

をコードがAppWidgetであると思わので、私ではなく、実際のブロブのURIを必要とする理由は、ウィジェットからランチャーにデータを渡すときには数メグの非常に厳しい制限があるので、setImageViewUriではなくsetImageViewBitmapを使用する必要があります。

ありがとうございました。

+0

RawContact写真を取得できましたか?私はまたそれを得る方法を探していますが、成功することはありません... – dazito

答えて

2

問題の解決方法を次に示します。 Solution

私も非常に同じ問題を抱えていました。そして、Androidのソースコードを掘り下げて読んだ後、私はそれを得ました。それはおそらく今までに(あなたのために)遅れているかもしれませんが、ここにはとにかくです。

public InputStream getBitmapFromUri(String rawContactId) throws FileNotFoundException { 

    final Uri photoUri = Uri.withAppendedPath(
      ContentUris.withAppendedId(RawContacts.CONTENT_URI, Long.valueOf(rawContactId)), RawContacts.DisplayPhoto.CONTENT_DIRECTORY); 
    final InputStream imageStream = contentResolver.openInputStream(photoUri); 

    return imageStream; 
} 
+0

ニースが見つかりました! :) 私はContactsContract.RawContacts.DisplayPhotoで少し読んだことがありますが、これはAPI 14にのみ追加されているようですので、なぜドキュメントを掘り下げたのか分かりません。 – marmor

1

「連絡先」の写真を取得するには、「データ」テーブル(ContactsContract.Data)に直接アクセスする必要があると思います。列 'data15'にはそれを格納する必要があります。 Contacts.Photo.CONTENT_DIRECTORYは連絡先のプライマリフォトパスですが、デフォルトでは未処理の連絡先にはそのようなパスはありません。

+0

ありがとう、しかしdata15は写真のBLOB自体ですので、setImageViewUriを使用することはできません。どういうわけかそのBLOBのURIを取得できますか? ? – marmor

0

あなたがRawContactsを照会している場合、あなたはまた、あなたがURIを同じよう構築することができ、投影にRawContacts.CONTACT_IDを追加することができます。一年後

long contactId = cursor.getLong(cursor.getColumnIndex(RawContacts.CONTACT_ID)); 
Uri person = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 
Uri photoUri = Uri.withAppendedPath(person, Contacts.Photo.CONTENT_DIRECTORY); 
+0

ありがとう@Guihji、私はRawContactの写真にアクセスする必要があります。その連絡先の選択されたプライマリではありません。私は生のものが必要です一部のデバイスでFacebookの同期された写真はサードパーティ製のアプリケーションにアクセスできないので、まずプライマリを取得しようとします。アクセスできない場合(FB写真の場合)、別の写真Rawの1つから。 – marmor

0

なし本当の答えを、私はそれができないと思います終わり。

私は 、setImageBitmap代わりのsetImageUriを使用して終了し、サイズはconstの制限の下になるまで(可能な限り、ビットマップのますます小さいサイズを要求ループをメモリ消費量を削減するために、ビットマップのスケーリングコードを使用)。

これはほぼすべてのユーザーにとってうまくいくように見えましたが、ウィジェットで写真が欠落していると不満を表明しているユーザーもいますが、ユーザーの2-3%未満しか受け入れられません。

関連する問題