デバイスの内蔵メモリと外部メモリの両方の画像をアプリケーションに追加しようとしています。ギャラリーインテントを開き、ファイルのパスを取得できましたが、ImageViewのビットマップに変換できません。Android内蔵/外付けストレージから画像を選択
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null !=data){
Uri selectedImageUri = data.getData();
String[] projection = {MediaStore.Images.Media.DATA};
@SuppressWarnings("deprecation")
Cursor cursor = getContentResolver().query(selectedImageUri, projection, null, null, null);
cursor.moveToFirst();
int column_index = cursor.getColumnIndex(projection[0]);
imagePath = cursor.getString(column_index);
cursor.close();
imageFile = new File(imagePath);
if (imageFile.exists()){
Bitmap imageBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
imgPhoto.setImageBitmap(imageBitmap);
}
} else {
Toast.makeText(context, "You have not selected and image", Toast.LENGTH_SHORT).show();
}
}
私はマニフェストに次の権限が含まれている:ここで
icoGallery = (ImageView) findViewById(R.id.icoGallery);
icoGallery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, RESULT_LOAD_IMAGE);
}
});
がonActivitResultのコードです:
はここでギャラリー呼び出すアイコンのonclickリスナーのthecodeです
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
次のエラーが発生する場合があります。
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/20170215_152240.jpg: open failed: EACCES (Permission denied)
私はそれが失敗している理由の一部は、デバイスが内部ストレージしか持っていないためだと思う。ローカルストレージまたは外部ストレージのいずれかにあるデバイスからイメージを追加する方法はありますか?または、ユーザーに内部ストレージまたは外部ストレージを使用するかどうかを尋ねる機能を作成する必要がありますか?事前に
感謝:)
EDIT: エラーがImageViewのを初期化しないことによって引き起こされました。ただし、ギャラリーアクティビティから戻ってファイルのパスを返すと、イメージはImageViewに表示されません。背景色に変わります。
あなたはエミュレータ上で実行していますか?そうでない場合は、実際のデバイスで実行し、あなたのPCからUSB接続を削除してみてください。 – noahutz
私は実際のデバイスでテストしています。まだ変更はありません –
実行しているデバイスのバージョンは?私はそれがAndroid 6.0だと思います。そうであれば、有効にする必要がある実行時アクセス許可が原因です。 Android 6.0より前のデバイスを使用して、コードが機能しているかどうかを確認してください。 – noahutz