当前位置:   article > 正文

android加载不上0文件,Android - 无法打开的内容:file:/// storage/emulated/0

请求的页面无法打开:file:///storage/emulated/0/android/data/io.dcloud.hbuilde

看来setImageViewUri不再是安全与文件中使用://的URI。

为什么?

果冻豆介绍了READ_EXTERNAL_STORAGE权限。想要从外部存储读取的应用程序必须拥有此权限。在KitKat之前,这不是默认强制执行的。

启动程序不具有此权限。实际上,您无法保证您附加的任何RemoteView拥有该权限。这使得使用setImageViewUri不安全,因为您不知道远程图像视图是否能够读取给定的uri。

现在是什么?

选项1:使用setImageViewBitmap。

你可能已经从该选项离开由于未能粘合剂交易。这些技巧只是确保您的图像低于1 MB。这听起来并不难。你可以计算出你的图像究竟有多大。例如,如果你使用的是ARGB_8888图像,这意味着你需要每像素4个字节。

1 Mb = 1048576 bytes = 262144 pixels = 512 x 512 image

当然你也可以使用RGB_565获得2倍的像素挤出更多的是:我们可以通过calulate的最大尺寸。

另请注意,如果您的小部件很小,则可能不需要大图像。您appwidget可以通过以下询问其具体的选项:

Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetIds[i]);

int minWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);

int minHeight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);

int maxWidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);

int maxHeight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);

要知道,返回的值是不沾像素,所以你需要将它们转换为扩展您的位图。

选项2:使用内容提供商

如果由于某种原因,你还是不喜欢的IPC限制,你总是可以建立一个自定义的内容提供商。把这个uri传入setImageViewUri,你应该很好走。

路径切换怎么样?

路径切换不是真正的问题。看起来这是一个问题,但仿真实际上工作正常。尝试在//storage/emulated/0/sdcard/mydir/bgs内创建一个文件,该文件将创建得很好。

您会注意到,虽然异常是FileNotFoundException,但消息是Permission Denied。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/319224
推荐阅读
相关标签
  

闽ICP备14008679号