赞
踩
看来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。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。