4

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

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);

しかし、それは機能しません...

実際のBLOBの代わりにURIが必要な理由は、コードがAppWidgetにあり、ウィジェットからランチャーにデータを渡すときに2、3メガの非常に厳しい制限があるように見えるため、setImageViewUriを使用する必要があります。 setImageViewBitmap。

ありがとう。

4

4 に答える 4

2

これがあなたの問題の解決策です。解決

私もまったく同じ問題を抱えていました。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;
}
于 2014-02-19T13:06:42.820 に答える
1

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

于 2011-08-28T08:25:52.623 に答える
0

クエリをRawContacts実行している場合は、プロジェクションに追加することもできRawContacts.CONTACT_IDます。同じ方法でURIを作成できます。

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);
于 2011-10-11T13:32:00.367 に答える
0

一年後、本当の答えはありません、私はそれができないと思います。

setImageBitmapの代わりにを使用setImageUriすることになり、ビットマップのスケーリングコードを使用して、メモリ消費を可能な限り削減しました(サイズがconst制限を下回るまで、ビットマップのサイズをどんどん小さくするループ)。

これはほとんどすべてのユーザーにとってうまく機能しているようで、ウィジェットに写真がないことについて不満を言う人もいますが、ユーザーの2〜3%未満で、ある程度許容できると思います。

于 2012-04-22T13:24:38.343 に答える