在 Kotlin 的 Android(API +24)中创建(主屏幕)小部件时如何设置 ImageView 的图像(任何文件大小)

问题描述 投票:0回答:0

我有一个问题,我需要在 Kotlin 中创建一个小部件,它必须从系统图库中获取图像并将它们显示在

ImageView
(随机选择)中。

我成功地使它在

MainActivity
(不能存在)和小部件的配置活动(这是可选的,也不应该存在)中工作。但是当我尝试将
RemoteViews.setImageViewUri()
(而不是直接在
ImageView
ImageSwitcher
上使用相同的方法)与我从查询
Uri
中获取的
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
一起使用时,我得到一个错误:

android.os.FileUriExposedException: file:///storage/0000-0000/path/to/file.png exposed beyond app through RemoteViews.setUri()

我从无数个小时的尝试中了解到,执行此方法的活动是主屏幕活动,它没有读取任意文件的权限。但是我的应用程序(小部件)有它们(

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
)。并且没有
Intent
可以授予任何权限标志。我尝试使用自定义
ContentProvider
FileProvider
但它总是说:

java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/0000-0000/path/to/file.png

无论我在 XML 文件中包含哪些路径。

我想知道如何解决这个问题的某种 MWE,因为互联网上几乎没有 0 个例子。 (我看到位图操作只适用于小图像,但也有一些问题在尝试将

Uri
传递给
RemoteViews.setImageViewUri()
raw/naked 或任何类型的
FileProvider
包装器时也有同样的问题,但都没有为我到目前为止)。

我开始使用的项目模板(在 Android Studio 中)是

No Activity
+
File > New > Widget > App widget
Configuration Screen
复选框被选中)。

附言我的代码库现在看起来非常混乱而且非常大(在所有的试验和错误之后)。这就是为什么我只需要一些指导,因为我没有任何特别有用的东西。我(认为我)已经讲过的所有要点。

android android-image android-gallery android-appwidget android-7.0-nougat
© www.soinside.com 2019 - 2024. All rights reserved.