前回、「【Cordova】Android 11においてDownloadフォルダにアクセスする方法」においてMANAGE_EXTERNAL_STORAGE権限を使用する方法を紹介しましたが、Googleの審査が通りませんでした。


今抱えている問題は、他端末で作成したアプリのバックアップファイルを、Android11以降の端末で読むことができないことです。

ACTION_OPEN_DOCUMENTインテントアクションを使用し、指定したファイルを選択させるやり方に変更する必要があります。

if (SDK_INT >= Build.VERSION_CODES.R) {
  Uri pickerInitialUri =  MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL);
  this.readFileName = args.getString(0);
  Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
  intent.addCategory(Intent.CATEGORY_OPENABLE);
  intent.setType("text/plain");
  intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri);
  intent.putExtra(Intent.EXTRA_TITLE, this.readFileName);
  cordova.startActivityForResult(this, intent, REQUEST_CODE_MEDIA_STORE_OPEN);
}

cordova-plugin-fileプラグインがアップデートするときに、この問題も解決すると期待していましたが、残念ながら未対応でした。
その後、MANAGE_EXTERNAL_STORAGE権限を使用すればよいというコメントを見つけて、自作プラグインで実装しましたが、今度はGoogleの審査が通らず・・・
やっとここまでたどり着いた感じです。
Google Driveに関しても似たような権限の問題が発生しており、Googleの縛りに振り回される日々が続きそうです。

Recommended Posts