前回、「【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の縛りに振り回される日々が続きそうです。