2017-02-16 14 views
0

デバイスの内蔵メモリと外部メモリの両方の画像をアプリケーションに追加しようとしています。ギャラリーインテントを開き、ファイルのパスを取得できましたが、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に表示されません。背景色に変わります。

+0

あなたはエミュレータ上で実行していますか?そうでない場合は、実際のデバイスで実行し、あなたのPCからUSB接続を削除してみてください。 – noahutz

+0

私は実際のデバイスでテストしています。まだ変更はありません –

+0

実行しているデバイスのバージョンは?私はそれがAndroid 6.0だと思います。そうであれば、有効にする必要がある実行時アクセス許可が原因です。 Android 6.0より前のデバイスを使用して、コードが機能しているかどうかを確認してください。 – noahutz

答えて

2

あなたはこのようImageViewに直接Uriを設定することができます。

Uri selectedImageUri = data.getData(); 
imageView.setImageURI(selectedImageUri); 

そしてImageViewのからビットマップを取得:

Drawable drawable = imageView.getDrawable(); 
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 
+0

ありがとうございました!!!!これは完全に機能します。だから今私はウリの活動のイメージを設定することができますが、私がRecyclerViewで同じことをしようとすると背景色以外は表示されません。 –

関連する問題