現在Androidアプリの開発をしており、MainActivityではないページでギャラリーから画像を選択してそれらのURIをRoomデータベースに保存し、MainActivityのonCreateやonStartのタイミングでRoomデータベースから保存されているURIを取得してそれが表す画像をimageViewに設定する機能を実現したいと考えています。
しかしURIをデータベースに保存するところ、データベースからURIを取得するところまでは上手くいくのですが、取得したURIからimageViewに画像を設定するところでエラーが発生してしまいます。
データベースからURIを取得するコードは
Java
1FetchPicData fetchPicData = new FetchPicData(); 2fetchPicData.start(); 3 4while(true){ 5 try{ 6 Thread.sleep(100L); 7 } catch (InterruptedException e){ 8 System.out.println(e.getMessage()); 9 } 10 if(fetchPicData.isFinished()){ 11 break; 12 } 13} 14String[] uris = fetchPicData.getUris();
で、fetchPicDataクラスが
Java
1public class FetchPicData extends Thread { 2 private String[] uris; 3 private boolean finished; 4 5 public void run() { 6 AppDatabase db = AppDatabaseSingleton.getInstance(GetContext.getAppContext()); 7 PictureDao pictureDao = db.pictureDao(); 8 uris = pictureDao.getUriList(); 9 finished = true; 10 } 11 12 public String[] getUris(){ 13 return uris; 14 } 15 16 public boolean isFinished(){ 17 return finished; 18 } 19}
となっており、取得したURIからimageViewに画像を設定する箇所のコードは
Java
1try { 2 Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(uris[i])); 3 imageView.setImageBitmap(bitmap); 4}catch (IOException e) { 5 e.printStackTrace(); 6}
となっており(urisはString[]型でURIを表す文字列を格納しています)、エラーの文は
/com.example.piccapture E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.piccapture, PID: 31922 java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.contentprovider.impl.MediaContentProvider from ProcessRecord{ecaa030 31922:com.example.piccapture/u0a148} (pid=31922, uid=10148) that is not exported from UID 10117 at android.os.Parcel.createException(Parcel.java:2071) at android.os.Parcel.readException(Parcel.java:2039) at android.os.Parcel.readException(Parcel.java:1987) at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:5054) at android.app.ActivityThread.acquireProvider(ActivityThread.java:6561) at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2725) at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:2117) at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1671) at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503) at android.content.ContentResolver.openInputStream(ContentResolver.java:1187) at android.provider.MediaStore$Images$Media.getBitmap(MediaStore.java:1707) at com.example.PicCapture.MainActivity.createView(MainActivity.java:152) at com.example.PicCapture.MainActivity.onStart(MainActivity.java:66) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1425) at android.app.Activity.performStart(Activity.java:7825) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3294) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) Caused by: android.os.RemoteException: Remote stack trace: at com.android.server.am.ActivityManagerService.getContentProviderImpl(ActivityManagerService.java:6820) at com.android.server.am.ActivityManagerService.getContentProvider(ActivityManagerService.java:7240) at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2078) at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2741) at android.os.Binder.execTransactInternal(Binder.java:1021)
となっています。(piccaptureはアプリ名です)
Permission Denialとあったので外部ストレージの書き込み権限を付与するようにしてみたのですがうまくいかず、エラーの文で検索をかけてみましたが解決することができませんでした。
当方Androidアプリの開発初心者のため行き詰ってしまい困っています。どなたかお力添えをいただけると大変ありがたいです。ご回答よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー