アクセス権限の確認 & 取得
ダイアログで権限の許可 or 拒否の操作完了時にonRequestPermissionsResult()がコールバックされる。
fun accessStorage(){ if(ContextCompat.checkSelfPermission( activity!!, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED ) { //権限あり readExternalStorage() return } //権限なし if(shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE)){ //拒否済み } //権限許可確認ダイアログ requestPermissions( arrayOf<String>(Manifest.permission.READ_EXTERNAL_STORAGE), 2 ) }
共有ストレージのアクセス
暗黙インテントを送信する。ストレージから戻ってきた時にonActivityResult()がコールバックされる
private fun readExternalStorage() { val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI) intent.setType("image/*") startActivityForResult(Intent.createChooser(intent,"Title"), 1) }
権限要求結果
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { if(requestCode != 2){return} if(grantResults.size != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED){ //要求拒否 return } //ストレージアクセス readExternalStorage() }
ストレージから戻ってきた時の処理
この例では保存されている画像を選択された時を想定 data:Intent?の中に選択されたファイル情報が入ってくるので、ファイルに対する処理を記述する
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(requestCode != 1 ) {return} if(resultCode != RESULT_OK){return} //選択なし if(data == null){return} data.data?.let { uri -> //選択された画像に対する処理 }
リンク
リンク