3

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 で、いずれかの画像を読み込もうとするとこの例外が発生します。どんな助けでも大歓迎です。

4

2 に答える 2

0

わかりました、私は問題を理解しました。別のプロセスがファイルにアクセスできないため、動作しないように見える RemoteView メソッド setImageUri() を使用していました。解決策は、 setImageViewBitmap() を使用して、次のようにビットマップを自分でデコードすることです。たとえば、 BitmapFactory.decodeFile(Uri.parse(uri).getPath())

ただし、 setImageUri() がランチャーでは正常に機能するのに、ロック画面では機能しないのは奇妙です。

于 2012-12-01T19:39:48.500 に答える
0

トマーシュは正しかった。content:Uri の代わりに Uriを使用するとfile:、問題が解決しました。

この SO answerからContentProvider を介してファイルを提供する方法を示すこのサンプル プロジェクトを参照してください。

于 2013-06-05T23:12:08.943 に答える