いつもお世話になっています。
Androidの端末ストレージから画像を読込む処理が必要なためpermission.READ_EXTERNAL_STORAGEを許可するMパーミッション対応を行いました。
Mパーミッションの実装はPermissonDispatcherを使用させて頂きました。
https://qiita.com/kazy/items/0ded30d80cef9df54c98 を参考にさせていただきました。
以下の様に変更しました(gradleの設定は省略しています)
java
1 2import android.Manifest; 3import android.database.Cursor; 4import android.net.Uri; 5import android.os.Bundle; 6import android.provider.MediaStore; 7import android.support.v7.app.AppCompatActivity; 8import android.widget.CursorAdapter; 9import android.widget.GridView; 10 11import permissions.dispatcher.NeedsPermission; 12import permissions.dispatcher.RuntimePermissions; 13/* 14 * 15 * 端末のストレージから画像を読み込むために READ_EXTERNAL_STORAGE のMパーミッション対応をしています。 16 * Mパーミッション実装のためにPermissionsDispatcherを利用しています。 17 * 18*/ 19 20@RuntimePermissions 21public class MainActivity extends AppCompatActivity { 22 23 private GridView mGridView = null; 24 25 @NeedsPermission(Manifest.permission.READ_EXTERNAL_STORAGE) 26 @Override 27 protected void onCreate(Bundle savedInstanceState) { 28 super.onCreate(savedInstanceState); 29 setContentView(R.layout.activity_main); 30 31 // パーミッションの要求 32 MainActivityPermissionsDispatcher.onCreateWithPermissionCheck(this, savedInstanceState); 33 } 34 35 @Override 36 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 37 MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults); 38 39 // ここで Cursor を使って端末ストレージから画像を取得する 40 } 41} 42
起動してパーミッションの許可を求めるダイアログの表示まではうまくいきました。
しかしパーミッションの「許可」を行った所、onRequestPermissionsResultでエラーが起きて落ちました。
11-30 16:45:20.880 26358-26358/hoge.example.com.gridviewapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: hoge.example.com.gridviewapplication, PID: 26358 java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=0, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {hoge.example.com.gridviewapplication/hoge.example.com.gridviewapplication.MainActivity}: java.lang.IllegalStateException: Already attached at android.app.ActivityThread.deliverResults(ActivityThread.java:3699) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) at android.app.ActivityThread.-wrap16(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.IllegalStateException: Already attached at android.support.v4.app.FragmentManagerImpl.attachController(FragmentManager.java:2939) at android.support.v4.app.FragmentController.attachHost(FragmentController.java:104) at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:275) at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84) at hoge.example.com.gridviewapplication.MainActivity.onCreate(MainActivity.java:31) at hoge.example.com.gridviewapplication.MainActivityPermissionsDispatcher$MainActivityOnCreatePermissionRequest.grant(MainActivityPermissionsDispatcher.java:71) at hoge.example.com.gridviewapplication.MainActivityPermissionsDispatcher.onRequestPermissionsResult(MainActivityPermissionsDispatcher.java:36) at hoge.example.com.gridviewapplication.MainActivity.onRequestPermissionsResult(MainActivity.java:61) at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:6582) at android.app.Activity.dispatchActivityResult(Activity.java:6460) at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) at android.app.ActivityThread.-wrap16(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method)
「何度も呼んでんじゃねぇよ!」的なエラーですが、これはどうすれば解決しますか?
try ~ catch で投げるしかないのでしょうか?
回答1件
あなたの回答
tips
プレビュー