简体   繁体   English

Android - 使用 action_view 意图打开本地图像 uri

[英]Android - Open local image uri with action_view intent

I'm working on old Android Java app.我正在处理旧的 Android Java 应用程序。 Now I've a problem with an image opening through action_view intent.现在我在通过 action_view 意图打开图像时遇到问题。 I've the image saved locally at context.getFilesDir()/myDir/myImage.png path and I've setup a provider.我已将图像本地保存在 context.getFilesDir()/myDir/myImage.png 路径中,并且我已经设置了一个提供程序。

For opening the image I do this:为了打开图像,我这样做:

File imagePath = new File(requireContext().getFilesDir(), "myDir");
File newFile = new File(imagePath, miImage.getFilename());
Uri contentUri = getUriForFile(requireContext(), requireContext().getPackageName() + ".provider", newFile);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
requireContext().grantUriPermission(requireContext().getPackageName(), contentUri, FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
i.setData(contentUri);

startActivity(i);开始活动(我);

All seems to work, but unfortunately after selecting the gallery app I didn't see the image but only an infinite loader.一切似乎都有效,但不幸的是,在选择了图库应用程序后,我没有看到图像,而是看到了一个无限加载器。

Someone can help me?有人可以帮助我吗?

Thanks.谢谢。

PS The app is built with Android 10 sdk. PS 该应用程序是用 Android 10 sdk 构建的。

You can use Glide, it permits to manage image你可以使用 Glide,它允许管理图像

https://github.com/bumptech/glide https://github.com/bumptech/glide

 mFavDishDetails?.let {
        if (it.id != 0) {
            mImagePath = it.image

            // Load the dish image in the ImageView.
            Glide.with(this@AddUpdateDishActivity)
                .load(mImagePath)
                .centerCrop()
                .into(mBinding.ivDishImage)

            mBinding.etTitle.setText(it.title)
            mBinding.etType.setText(it.type)
            mBinding.etCategory.setText(it.category)
            mBinding.etIngredients.setText(it.ingredients)
            mBinding.etCookingTime.setText(it.cookingTime)
            mBinding.etDirectionToCook.setText(it.directionToCook)

            mBinding.btnAddDish.text = resources.getString(R.string.lbl_update_dish)
        }


  /**
 * Receive the result from a previous call to
 * {@link #startActivityForResult(Intent, int)}.  This follows the
 * related Activity API as described there in
 * {@link Activity#onActivityResult(int, int, Intent)}.
 *
 * @param requestCode The integer request code originally supplied to
 *                    startActivityForResult(), allowing you to identify who this
 *                    result came from.
 * @param resultCode The integer result code returned by the child activity
 *                   through its setResult().
 * @param data An Intent, which can return result data to the caller
 *               (various data can be attached to Intent "extras").
 */
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == CAMERA) {

            data?.extras?.let {
                val thumbnail: Bitmap =
                    data.extras!!.get("data") as Bitmap // Bitmap from camera

                // Set Capture Image bitmap to the imageView using Glide
                Glide.with(this@AddUpdateDishActivity)
                    .load(thumbnail)
                    .centerCrop()
                    .into(mBinding.ivDishImage)

                mImagePath = saveImageToInternalStorage(thumbnail)
                Log.i("ImagePath", mImagePath)

                // Replace the add icon with edit icon once the image is loaded.
                mBinding.ivAddDishImage.setImageDrawable(
                    ContextCompat.getDrawable(
                        this@AddUpdateDishActivity,
                        R.drawable.ic_vector_edit
                    )
                )
            }
        } else if (requestCode == GALLERY) {

            data?.let {
                // Here we will get the select image URI.
                val selectedPhotoUri = data.data

                // Set Selected Image URI to the imageView using Glide
                Glide.with(this@AddUpdateDishActivity)
                    .load(selectedPhotoUri)
                    .centerCrop()
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .listener(object : RequestListener<Drawable> {
                        override fun onLoadFailed(
                            @Nullable e: GlideException?,
                            model: Any?,
                            target: Target<Drawable>?,
                            isFirstResource: Boolean
                        ): Boolean {
                            // log exception
                            Log.e("TAG", "Error loading image", e)
                            return false // important to return false so the error placeholder can be placed
                        }

                        override fun onResourceReady(
                            resource: Drawable,
                            model: Any?,
                            target: Target<Drawable>?,
                            dataSource: DataSource?,
                            isFirstResource: Boolean
                        ): Boolean {

                            val bitmap: Bitmap = resource.toBitmap()

                            mImagePath = saveImageToInternalStorage(bitmap)
                            Log.i("ImagePath", mImagePath)
                            return false
                        }
                    })
                    .into(mBinding.ivDishImage)

                // Replace the add icon with edit icon once the image is selected.
                mBinding.ivAddDishImage.setImageDrawable(
                    ContextCompat.getDrawable(
                        this@AddUpdateDishActivity,
                        R.drawable.ic_vector_edit
                    )
                )
            }
        }
    } else if (resultCode == Activity.RESULT_CANCELED) {
        Log.e("Cancelled", "Cancelled")
    }
}

Github repo Github 回购

https://github.com/wilson1234567891962/Complete-Android-11-Jetpack-Masterclass https://github.com/wilson1234567891962/Complete-Android-11-Jetpack-Masterclass

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM