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

я ищу способ открыть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), но мне нужно просто открыть галерею.

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

Спасибо

 Dfranc337306 июн. 2013 г., 00:30
MinSdkVersion составляет 8
 ozbek05 июн. 2013 г., 03:36
Какие'Ваша версия minSdkVersion?
 UpLate05 июн. 2013 г., 01:56
Это должно ответить на ваш вопрос ...stackoverflow.com/a/4979492/1620738

Ответы на вопрос(6)

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+

 Rohit Kumar23 нояб. 2017 г., 16:10
Спасибо вам большое за это :)
Решение Вопроса

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

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);
 Akshay Katariya09 мая 2018 г., 19:43
Этот ответ - то, что я искал, я также реализовал тот же код в одном из моих приложений, но он падает на некоторых устройствах :-(
 Enoobong26 февр. 2017 г., 13:33
Это единственный ответ, который отвечает на вопрос! Ему просто нужноМне нужно просто открыть галерею. не забрать или вернуть нада
 Mikhail03 апр. 2018 г., 09:42
Эти ответы должны быть приняты в качестве решения.

попробуйте следующий простой код.

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

что это поможет вам. Этот код работает для меня.

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);
    }
</bitmap></bitmap>
 Denis Kniazhev16 нояб. 2014 г., 21:02
не должен»т курсор будет закрыт?
 nb299813 окт. 2018 г., 22:13
не мог»Импортировать decodeFilePath (). Вместо этого используется BitmapFactory.decodeFile (pathname).
 Red M28 апр. 2017 г., 04:16
Не удалось импортировать decodeFilePath
 Makalele31 окт. 2016 г., 20:03
picturePath является нулевым в моем случае (Android 7.0).

даже после добавления следующего кода

Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);

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

РЕШЕНИЕ ПРОБЛЕМЫ

Поместите намерение в файл класса, который связан с кнопкой 'файл макета. например-activity_main.xml содержит кнопку, и это связано сMainActivity.java file, но из-за фрагментации вы определяете намерение в каком-то другом классе (скажем, говорит Activity.java), тогда ваше приложение будет зависатьесли вы не поместите намерение в файл MainActivity.java. Я получаю эту ошибку, и она разрешается этим.

Следующее может быть использовано в Activity или Fragment.

 private File mCurrentPhoto;

Добавить разрешения

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

Добавить содержимое, чтобы открыть "изображения селектор» а также "фото захвата»

//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 != n,ull) {
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mCurrentPhoto));
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}
}

Добавьте обработку при получении фото.

@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);
}
 Ishara Amarasekera03 дек. 2017 г., 17:17
Действительно ли требуется разрешение, чтобы открыть галерею. Я не'Не нужно использовать какие-либо разрешения, чтобы открыть галерею.
 TeeTracker08 мар. 2018 г., 19:27
@IsharaAmarasekera, если не сбой и все в порядке для вас, то нет

Ваш ответ на вопрос