Androidのアプリ開発関連のブログ

targetSdkVersionを26にしたらストレージアクセスでエラー

対象APIレベルを26にしたら他にも大問題が発生した。

2番目の問題だが、APIレベル23(Android 6.0)から?
要求権限によってはインストール時に取得できず、アプリで取得しないといけないみたい。
外部ストレージの読み書き権限の確認と取得処理を入れる必要があった。

import android.support.v4.content.ContextCompat;
import android.support.v4.app.ActivityCompat;
import android.content.pm.PackageManager;
import android.Manifest;

    if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
    }else{
        //ストレージアクセス
    }
こんな感じで、ストレージアクセスするところで権限を確認して、無ければ要求。

さらに、
    public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){
        if(requestCode==1){
            if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED&&grantResults[1]==PackageManager.PERMISSION_GRANTED){
                //ストレージアクセス
            }
        }
    }
こんな感じで要求に対する応答が返ってくるのだが、
ここで処理しても権限が有効になって無くて結局エラーになる。

再起動すれば有効になってるんだが、そのまま処理する方法がわからない・・・