Открыть приложение галереи с Android Intent

Я ищу способ открыть Android галереи Android с намерением.

Я не хочу возвращать изображение, а просто откройте галерею, чтобы позволить пользователю использовать ее, как если бы они выбрали ее из панели запуска ( View pictures/folders ).

Я попытался сделать следующее:

 Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_GET_CONTENT); intent.setType("image/*"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Однако это вызывает закрытие приложения после выбора изображения (я знаю, это из-за ACTION_GET_CONTENT ), но мне нужно просто открыть галерею.

Любая помощь будет отличной.

благодаря

Solutions Collecting From Web of "Открыть приложение галереи с Android Intent"

Я надеюсь, что это поможет вам. Этот код работает для меня.

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

ResultCode используется для обновления выбранного изображения в окне галереи

 if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); if (cursor == null || cursor.getCount() < 1) { return; // no cursor or no record. DO YOUR ERROR HANDLING } cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); if(columnIndex < 0) // no column index return; // DO YOUR ERROR HANDLING String picturePath = cursor.getString(columnIndex); cursor.close(); // close cursor photo = decodeFilePath(picturePath.toString()); List<Bitmap> bitmap = new ArrayList<Bitmap>(); bitmap.add(photo); ImageAdapter imageAdapter = new ImageAdapter( AddIncidentScreen.this, bitmap); imageAdapter.notifyDataSetChanged(); newTagImage.setAdapter(imageAdapter); } 

Вы можете открыть галерею, используя следующее:

 public static final int RESULT_GALLERY = 0; Intent galleryIntent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(galleryIntent , RESULT_GALLERY ); 

Если вы хотите получить URI результата или сделать что-нибудь еще, используйте это:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case QuestionEntryView.RESULT_GALLERY : if (null != data) { imageUri = data.getData(); //Do whatever that you desire here. or leave this blank } break; default: break; } } 

Протестировано на Android 4.0+

Это то, что вам нужно:

 ACTION_VIEW 

Измените свой код на:

 Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setType("image/*"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 
  1. Следующие могут быть использованы в Activity или Fragment.

      private File mCurrentPhoto; 
  2. Добавить разрешения

     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> 
  3. Добавьте намерения, чтобы открыть «селектор изображений» и «фото-захват»,

     //A system-based view to select photos. private void dispatchPhotoSelectionIntent() { Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); this.startActivityForResult(galleryIntent, REQUEST_IMAGE_SELECTOR); } //Open system camera application to capture a photo. private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // Ensure that there's a camera activity to handle the intent if (takePictureIntent.resolveActivity(App.Instance.getPackageManager()) != null) { try { createImageFile(); } catch (IOException ex) { // Error occurred while creating the File } // Continue only if the File was successfully created if (mCurrentPhoto != null) { takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mCurrentPhoto)); startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } } 
  4. Добавьте обработку при получении фотографии.

     @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_IMAGE_SELECTOR: if (resultCode == Activity.RESULT_OK && data != null && data.getData() != null) { String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = App.Instance.getContentResolver().query(data.getData(), filePathColumn, null, null, null); if (cursor == null || cursor.getCount() < 1) { mCurrentPhoto = null; break; } cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); if(columnIndex < 0) { // no column index mCurrentPhoto = null; break; } mCurrentPhoto = new File(cursor.getString(columnIndex)); cursor.close(); } else { mCurrentPhoto = null; } break; case REQUEST_IMAGE_CAPTURE: if (resultCode != Activity.RESULT_OK) { mCurrentPhoto = null; } break; } if (mCurrentPhoto != null) { ImageView imageView = (ImageView) [parent].findViewById(R.id.loaded_iv); Picasso.with(App.Instance).load(mCurrentPhoto).into(imageView); } super.onActivityResult(requestCode, resultCode, data); } 

Поскольку вы не хотите, чтобы результат возвращался, попробуйте выполнить простой код.

 Intent i=new Intent(Intent.ACTION_PICK); i.setType("image/*"); startActivity(i);