Android 2.1以降で連絡先の写真を操作する

Androidシステム用のプログラミングを学ぶ過程で、システム1と引き換えにではなく、つまりトレーニングタスクとして、連絡先マネージャーを作成する必要がありました。

連絡先リストを使用した作業についてここで一度も説明しました。これは、ここでは見たことがないもの、特に連絡先の写真(連絡先のアバター)の操作についてのみ説明するためです。



作業の過程で、ヘルパークラスを作成しました 。コードはここにあります 。 連絡先の写真を操作するための基本機能を実装しました。

主に2つの方法があります。

public static void setContactPhoto(ContentResolver c, byte[] bytes, long personId)





public static Bitmap loadContactPhoto(ContentResolver cr, long id, Context context)





名前が示すように、最初の方法では新しい写真を連絡先に保存し、2番目の方法では連絡先データベースから写真を読み込みます。



メソッドの使用:

写真を連絡先に保存するには、まずギャラリーなどから写真を取得する必要があります。

ギャラリーから写真を選択するためのウィンドウが表示される、クリックによるアクティベーションのImageButtonボタンがあるとします。 ギャラリーの写真は任意のサイズにすることができることを忘れないでください。最初に、写真を目的のサイズに縮小する必要があるためです。 幸いなことに、Androidのプログラマーは画像のサイズとトリミングを削減するためのアルゴリズムの知識を必要としません。すべてはGoogleによって事前に行われています。必要なパラメーターを呼び出しに追加するだけで十分です。以下に例を示します。

 private static final int REQ_CODE_PICK_IMAGE = 1; private Bitmap contactPhoto = null; private ImageView ibtnAvatar; @Override protected void onCreate(Bundle bundle) { ... ibtnAvatar = (ImageButton) findViewById(R.id.ibtn_avatar); ibtnAvatar.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); i.putExtra("crop", "true"); i.putExtra("aspectX", 1); i.putExtra("aspectY", 1); i.putExtra("outputX", 500); i.putExtra("outputY", 500); i.putExtra("scale", true); i.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); i.putExtra("noFaceDetection", false); i.putExtra("return-data", false); i.putExtra(MediaStore.EXTRA_OUTPUT, ContactPhotoHelper.getTempUri()); startActivityForResult(i, REQ_CODE_PICK_IMAGE); } }); }
      
      





このコードからわかるように、新しいインテントを作成するときに、ドキュメントからパラメーターを追加して、サイズに合わせて自動的にトリミングし、写真を縮小しました。 システムアクティビティの実行結果は、標準でonActivityResultの呼び出しに配置され、そのアクティビティが発生します。

この例では、システムアクティビティが結果をContactPhotoHelper.getTempUri()メソッドで作成した一時ファイルに格納することに注意してください。

結果の処理:結果の写真がボタンに表示されます

  @Override protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { super.onActivityResult(requestCode, resultCode, imageReturnedIntent); switch (requestCode) { case REQ_CODE_PICK_IMAGE: if (resultCode == RESULT_OK) { contactPhoto = BitmapFactory.decodeFile(ContactPhotoHelper.getTempFile() .getAbsolutePath()); ibtnAvatar.setImageBitmap(contactPhoto); } } }
      
      







その後、このプロフィール写真をユーザーに保存できます。

  if (contactPhoto != null) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); contactPhoto.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos); byte[] bitmapdata = bos.toByteArray(); ContactPhotoHelper.setContactPhoto(getContentResolver(), bitmapdata, contactId); }
      
      





その結果、選択した連絡先は新しい写真を受け取ります



連絡先リストから写真を読み込むには、呼び出しは非常に簡単で、同じImageButtonボタンを使用します。

 ibtnAvatar.setImageBitmap(ContactPhotoHelper.loadContactPhoto(getContentResolver(), contactId, this));
      
      





したがって、たった2つの静的メソッドを使用して、連絡先の写真の作業を大幅に簡素化しました。これは、Googleの開発者が行っていない理由です。

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



All Articles