2016-08-12 7 views
0

Я пишу приложение, в котором пользователь нажмет кнопку в приложении, откроется галерея, пользователь выберет изображение из галереи и выбранного изображение должно отображаться в изображенииView, которое я разместил на экране. Когда я нажимаю кнопку, появляется галерея, я выбираю изображение, но по какой-то причине изображение не отображается на экране моего приложения. Большое спасибо за Вашу помощь. Я добавил только два разрешения следующим образом:Показать картинку в галерее приложения на Android

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

И вот мой код:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void showPicture(View view) { 
     Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     if (intent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(intent, 1); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 1 && resultCode == RESULT_OK && null != data) { 
      Uri photoUri = data.getData(); 
      Bitmap selectedImage = null; 

      try{ 
       selectedImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), photoUri); 
      } catch (Exception e){ 
       e.printStackTrace(); 
      } 
      ImageView imageView = (ImageView) findViewById(R.id.image); 
      imageView.setImageBitmap(selectedImage); 
     } 
    } 
} 

Edit: я попытался код, приведенный в ответ, но я получаю следующие ошибки в моей трассировки стека. Только RuntimeExceptions показаны для краткости:

                  java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/46 }} to activity {cs193a.stanford.edu.testproject/cs193a.stanford.edu.testproject.MainActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/46 from pid=2754, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 

                      Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/46 from pid=2754, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 

Единственная строка кода, которая представляется проблематичным в моем коде снова линия, где объявлен курсор. Большое спасибо за помощь

ответ

0

Чтобы открыть галерею

Intent i = new Intent(
Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

startActivityForResult(i, RESULT_LOAD_IMAGE); 

Чтобы вернуть результат:

@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent imageReturnedIntent) { 
    // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

     switch(requestCode) { 
     case RESULT_LOAD_IMAGE: 
      if(resultCode == RESULT_OK) 
      { 
       Uri uri = imageReturnedIntent.getData(); 
       String[] projection = {MediaStore.Images.Media.DATA}; 

       Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 
       cursor.moveToFirst(); 

       int columnIndex = cursor.getColumnIndex(projection[0]); 
       String filePath = cursor.getString(columnIndex); 
       cursor.close(); 
       Bitmap image = BitmapFactory.decodeFile(filePath); 

       ImageView im = (ImageView)findViewById(R.id.imagev); 
       im.setImageBitmap(image); 
      } 
     } 
    } 

Edit: Пожалуйста, попробуйте это сейчас

+0

Я попробовал код выше, но мое приложение падает, когда я его использую. Кажется, что есть проблема с линией: Курсор курсор = getContentResolver(). Query (selectedImage, filePathColumn, null, null, null); – BBB

+0

опубликуйте трассировку стека, чтобы показать ошибку. –

+0

См. Мой отредактированный пост для этой ошибки. Спасибо – BBB

Смежные вопросы