https://stackoverflow.com/a/32245018/2706551

ел несколько других вопросов по S / O, связанных с этим, но тот, который был ближе всего к моей проблеме, похоже, не получил много ответов (Xiaomi MI устройство не выбирает изображение из галереи). Надеясь на этот вопрос, повезет больше.

Я пытаюсь выбрать изображение из галереи телефона и передать путь к изображению в другой вид деятельности, где его предварительно просматривают для пользователя.

Я проверил это на двух других устройствах (Moto E и что-то под названием Coolpad?), И они оба, кажется, работают просто отлично.

(Отладка исходного кода Android не кажется практичным вариантом.)

В основном действии по триггеру пользовательского интерфейса я запускаю средство выбора галереи со следующим кодом:

private void dispatchPickPictureIntent() {
        Intent pickPictureIntent = new Intent(Intent.ACTION_PICK);
        pickPictureIntent.setType("image/*");
        startActivityForResult(pickPictureIntent, REQUEST_IMAGE_PICK);
    }

Я обрабатываю результат примерно так:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK) {
        Uri selectedImage = data.getData();
        mCurrentPhotoPath = getRealPathFromURI(this, selectedImage);
        launchUploadActivity();
    }
}

private String getRealPathFromURI(Context context, Uri uri) {
    Cursor cursor = null;
    try {
        String [] proj = {MediaStore.Images.Media.DATA};
        cursor = context.getContentResolver().query(uri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null)
            cursor.close();
    }
}

Как только я получил путь к файлу, сохраненный в глобальной переменнойmCurrentPhotoPath вызывается следующий метод:

private void launchUploadActivity() {
    Intent intent = new Intent(HomeActivity.this, UploadActivity.class);
    intent.putExtra(getString(R.string.photo_path), mCurrentPhotoPath);
    startActivityForResult(intent, REQUEST_IMAGE_UPLOAD);
}

Даже на Redmi, до тех пор, пока все идет гладко. В методе onCreate функции UploadActivity я успешно получаю строку пути к файлу изображения.

Но затем я пытаюсь просмотреть изображение:

private void previewPhoto() {
    imageView.setVisibility(View.VISIBLE);
    BitmapFactory.Options options = new BitmapFactory.Options();

    // Avoid OutOfMemory Exception
    options.inSampleSize = 8;

    // This line returns a null, only on the Xiaomi device
    final Bitmap bitmap = BitmapFactory.decodeFile(photopath, options);

    imageView.setImageBitmap(bitmap);
}

Теперь я попытался отладить эту проблему, но как только я вошел в исходный код BitmapFactory, я столкнулся с, казалось бы, нерешенной проблемой Android Studio (https://stackoverflow.com/a/40566459/3438497) что делает его бесполезным.

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

 Mohammed Farhan04 янв. 2018 г., 13:23
Лучше использовать файловый провайдерДокументы

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

Решение Вопроса

Uri to filepath не дает желаемого результата на всех устройствах.

Я использовал подход, предложенный здесь:https://stackoverflow.com/a/7265235/3438497

и немного подправил код, чтобы при выборе изображений из галереи я использовал Uri изображения напрямую.

используя следующий способ.

Добавьте ниже лиц в вашем файле манифеста

android:hardwareAccelerated="false"

android:largeHeap="true"

Это будет работать в некоторых средах.

Обратитесь ответ наhttps://stackoverflow.com/a/32245018/2706551

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