3

API 14 (Android 4.0 以降) 以降では、電話所有者のContactsContract.Profile.CONTENT_URI連絡先プロファイル Uriを取得するために使用でき、それを通じてアバター/連絡先の写真を取得できます。

API 8 (Android 2.2) から API 13 まででこれを行う方法を知りたいです。必要なのは写真だけです (したがって、API 14 より前のユーザー プロファイルの連絡先の概念がなくても問題ありません)。いいえは、それが実際に可能であることを意味します。

4

1 に答える 1

6

API 14 より前では、API 14 より前のユーザー プロファイルの概念はありません。

ContactsContract.Profile.CONTENT_URIつまり、 4.0 より前のデバイスで実行している場合に置き換える代替手段を見つけるという単純なケースではありません。本当に回避策を実装する必要があります。

悪い解決策 (A): SIM 電話番号を使用する

ユーザーが自分自身を連絡先として追加した場合、他の連絡先と同様に、その連絡先情報 (写真/アバターを含む) を番号で検索できます。ユーザーの電話番号は、SIM から取得できます。

((TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number();

番号を取得したら、クエリを使用して検索できます。

// Use PhoneLookup.PHOTO_URI from API 11 onwards for more direct lookup
final String[] proj = { PhoneLookup.DISPLAY_NAME, 
                        PhoneLookup._ID,
                        PhoneLookup.PHOTO_ID };
Cursor c = cr.query(Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
                                         Uri.encode(number)),
                    proj, null, null, PhoneLookup.DISPLAY_NAME);

カーソルを移動して適切なPHOTO_IDorを取得した後PHOTO_URI、存在する場合は、次のように適切な URI を構築できます。

// I assume local variables long photoId or String photoUriString
Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI,
                                          photoId);
// Just use Uri.parse(photoUriString); from API 11 onwards     

ただし、この方法にはいくつかの問題があります。

  • すべての通信事業者が電話番号を SIM に保存しているわけではありません。
  • すべての電話が SIM のそのセクションに書き込めるわけではありません。
  • そのセクションに書き込むすべての携帯電話が、Android で使用できる形式で書き込みを行うわけではありません。

少し良い解決策 (B): アプリケーションにユーザー アバター オプションを追加する

アプリケーションのオプションまたは設定として、ユーザーがプロファイル写真/アバターとして画像を選択する方法を実装します。これは合理的に簡単に実装できますが、アプリにアバターが必要な場合、ユーザーは手動でアバターを追加する必要があります。

車輪の再発明はしたくないので、画像を選択するための良い出発点はここにあります。ソース イメージが変更、移動、または削除された場合に備えて、ユーザーの選択によって返された URI だけでなく、適切なサイズのイメージを保存する必要があります。

API 14 以降のデバイスでもこの機能を許可することをお勧めします。これにより、ユーザーはアプリケーションに固有の別のアバターを持つことができるようになります。

代替ソリューション (C): A および B

なぜわざわざ?なぜBだけではないのですか?

SIMカードに電話番号が含まれている一部のユーザーは自分自身を連絡先として追加している可能性があるため(2.3 SMSアプリはSIM番号の検索を試みると思います)、アバターを手動で設定する必要がないことを非常に高く評価するため、両方を行うことを検討してください。 . 自動的に実行できる場合にユーザーに余分な作業をさせるのは良いことではありません。


最初に A を追加したのは、テスト対象の古いデバイスの機能を取得するためだけでした。その後、B も少し後に追加しました。

于 2013-05-14T03:22:37.557 に答える