Android: проблемы с чтением общего изображения другими приложениями - PullRequest
0 голосов
/ 08 ноября 2018

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

код:

    public void handleImage() {        
    Intent intent = getIntent();
    Uri imgUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);

    if (imgUri != null){
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        try {
            InputStream imgInputStream = context.getContentResolver().openInputStream(imgUri);
            Bitmap img = (BitmapFactory.decodeStream(imgInputStream));
            img.compress(Bitmap.CompressFormat.PNG, 100, stream);

            byte[] imgByteArray = stream.toByteArray();

            Bundle bundle = new Bundle();

            bundle.putByteArray("IMAGE_BYTEARRAY", imgByteArray);

            FragmentEntityEdit fragmentEntityEdit = new FragmentEntityEdit();
            fragmentEntityEdit.setArguments(bundle);
            changeFragment(fragmentEntityEdit,true,true);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Когда я делюсь изображением из браузера в первый раз, он работает нормально. Фрагмент запущен, и изображение может быть загружено в ImageView. Но во второй раз я использую опцию общего доступа браузера, это не загрузка нового изображения. (Только если я очищаю данные приложения вручную.)

ОБНОВЛЕНИЕ (загрузка изображения ImageView во фрагменте Entity): в OnCreateView:

    Bundle bundle = getArguments();
    if (bundle != null) {
        imgByteArray = bundle.getByteArray("IMAGE_BYTEARRAY");
    }

    ImageView imgOfEntity = view.findViewById(R.id.imageview_imgofentity);

    if (imgByteArray != null) {
        imgOfEntity.setImageBitmap(null);

        Glide
                .with(getActivity())
                .load(imgByteArray)
                .into(imgOfEntity);
    }

Знаете ли вы, как я могу получить новые изображения?

1 Ответ

0 голосов
/ 08 ноября 2018

Из кода, который вы разместили, проблема связана с вашим Glide звонком. Glide не загружает новый запрос в ImageView из-за его кеша.

Чтобы это исправить, вы можете попробовать что-то вроде этого:

Glide.with(imgOfEntity.getContext())
    .load(imgByteArray)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .skipMemoryCache(true)
    .into(imgOfEntity);
...