【问题标题】:Android 4.2 Lockscreen Widget image bitmaps won't loadAndroid 4.2 锁屏小部件图像位图不会加载
【发布时间】:2012-11-28 02:25:03
【问题描述】:

我正在尝试在 Android 4.2 锁屏上的应用中启用我的小部件,它工作正常,但无法解析任何图像 uri。我得到的错误是这样的:

java.io.FileNotFoundException: /storage/emulated/0/Android/data/com.tvshowfavs/cache/22kifo7sdmyet7x7kphdgch69: open failed: EACCES (Permission denied)
    at libcore.io.IoBridge.open(IoBridge.java:416)
    at java.io.FileInputStream.<init>(FileInputStream.java:78)
    at java.io.FileInputStream.<init>(FileInputStream.java:105)
    at android.content.ContentResolver.openInputStream(ContentResolver.java:447)
    at android.widget.ImageView.resolveUri(ImageView.java:636)
    at android.widget.ImageView.setImageURI(ImageView.java:381)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at android.widget.RemoteViews$ReflectionAction.apply(RemoteViews.java:1146)
    at android.widget.RemoteViews.performApply(RemoteViews.java:2304)
    at android.widget.RemoteViews.apply(RemoteViews.java:2263)
    at android.widget.RemoteViewsAdapter$RemoteViewsFrameLayout.onRemoteViewsLoaded(RemoteViewsAdapter.java:286)
    at android.widget.RemoteViewsAdapter$RemoteViewsFrameLayoutRefSet.notifyOnRemoteViewsLoaded(RemoteViewsAdapter.java:335)
    at android.widget.RemoteViewsAdapter$4.run(RemoteViewsAdapter.java:993)
    at android.os.Handler.handleCallback(Handler.java:725)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.os.HandlerThread.run(HandlerThread.java:60)
    Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
    at libcore.io.Posix.open(Native Method)
    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
    at libcore.io.IoBridge.open(IoBridge.java:400)

有人知道为什么它无法打开存储在模拟存储中的图像吗?该图像之前是使用 Environment.getExternalStorageDirectory() 下载和缓存的,因此应该将其正确写入存储目录。这是在尝试加载任何图像时收到此异常的 Nexus 10 上。任何帮助表示赞赏。

【问题讨论】:

    标签: android lockscreen android-4.2-jelly-bean


    【解决方案1】:

    好的,我找到了问题所在。我使用的是 RemoteView 方法 setImageUri(),它看起来好像不起作用,因为不同的进程无法访问该文件。解决方案是使用 setImageViewBitmap() 并自己解码位图,例如:BitmapFactory.decodeFile(Uri.parse(uri).getPath())

    我觉得奇怪的是 setImageUri() 可以在启动器上正常工作,但不能在锁屏上工作。

    【讨论】:

    【解决方案2】:

    Tomáš 是对的;使用 content: Uri 而不是 file: Uri 为我解决了这个问题。

    this SO answer 看到this sample project demonstrating how to serve Files via a ContentProvider

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多