2012-11-28 1 views
3

Android 4.2 lockscreen에서 내 위젯을 사용하려고하는데 제대로 작동하지만 이미지 URL을 확인할 수 없습니다.Android 4.2 Lockscreen 위젯 이미지 비트 맵이로드되지 않습니다.

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입니다. 어떤 도움을 주셔서 감사합니다.

답변

0

좋아, 문제를 파악했습니다. 나는 RemoteView 메서드 setImageUri()를 사용하고 있었지만 다른 프로세스가 파일에 액세스 할 수 없기 때문에 작동하지 않는 것처럼 보인다. 해결책은 setImageViewBitmap()을 사용하고 다음과 같이 비트 맵을 직접 디코딩하는 것입니다. BitmapFactory.decodeFile (Uri.parse (uri) .getPath())

setImageUri()가 작동하는 것이 이상한 경우가 있습니다. 런처로는 괜찮지 만 lockscreen에서는 그렇지 않습니다.

+1

URI를 통해 데이터를 공유하기 위해 스키마 콘텐츠가있는 콘텐츠 공급자를 사용하는 것이 더 좋습니다 (http://developer.android.com/reference/android/content/ContentProvider.html#openFile(android.net) 메서드 재정의). .Uri, java.lang.String)). 보안 위반을 피할 수 있습니다. –