###内容
ボタンを押して、端末内の画像を取得(表示)します。
完成イメージ。
###Layout
画像選択Buttonと取得した画像を表示するImageViewを用意します。
<Button
android:id="@+id/button2"
android:text="get image"
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/image_view"
android:scaleType="fitStart"
android:adjustViewBounds="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
###Activity
ボタンの押下時の処理でドキュメントを開くインテントを作成して、画像フォルダの読み込みを設定します。
結果の画像を取得するため、startActivityForResultで起動します。
第2引数には任意のIDを付与します。(戻ってきた時の判定で使用)
public class MainActivity extends AppCompatActivity {
private static final int RESULT_PICK_IMAGEFILE = 1000;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.image_view);
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, RESULT_PICK_IMAGEFILE);
}
});
}
startActivityForResult 終了後 onActivityResult が呼ばれて、
「結果コード、呼び出し時のID、結果」が渡されます。
結果コード(resultCode)には正常終了[RESULT_OK]、キャンセル[RESULT_CANCELED]が入っており、
呼び出し時のIDは startActivityForResult の第二引数が入っています。
resultDataの中身は画像パスが入っています。
その画像パスからBitmapを作成してLayoutのImageViewにセットします。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (requestCode == RESULT_PICK_IMAGEFILE && resultCode == RESULT_OK) {
Uri uri = null;
if (resultData != null) {
uri = resultData.getData();
try {
Bitmap bmp = getBitmapFromUri(uri);
imageView.setImageBitmap(bmp);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private Bitmap getBitmapFromUri(Uri uri) throws IOException {
ParcelFileDescriptor parcelFileDescriptor =
getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
parcelFileDescriptor.close();
return image;
}
}
###リファレンス
・ストレージ アクセス フレームワーク
https://developer.android.com/guide/topics/providers/document-provider.html?hl=ja
・アクティビティから結果を取得する
https://developer.android.com/training/basics/intents/result.html?hl=ja