我有一个问题,我需要在 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
复选框被选中)。
附言我的代码库现在看起来非常混乱而且非常大(在所有的试验和错误之后)。这就是为什么我只需要一些指导,因为我没有任何特别有用的东西。我(认为我)已经讲过的所有要点。