2020年9月14日月曜日

フォルダを標準ファイルアプリで開くIntent

Android 10で導入されたScoped Storageによって、ストレージに読み書きしていたアプリの開発者は大変な目にあっていますが、私も例に漏れず対応に追われています。

中でも困っているのが、自作のアプリが部分的にファイルエクスプローラー機能を持っている点。

MANAGE_EXTERNAL_STORAGE を使うという最終手段は残っていますが、恐らくGoogle Playのポリシー的に許可されないだろうという気持ちもあり、それ以外の道を探しています。

自前のエクスプローラー機能ではフォルダの作成やリネーム、移動などの基本的なファイル操作ができるのですが、requestLegacyExternalStorageが使えなくなるだろうAndroid 12では今のままでは使えなくなります。

大体手段として全てSAFでやるという方法もありますが、ちょっと対応とテストが大変なのでやめることにしました。

ファイルを開きたい場合ACTION_GET_CONTENTを使うとファイルピッカーを起動できますが、この場合フォルダの作成などファイル編集系メニューが表示されません。

ファイルピッカーとしてではなく、単に¥フォルダを指定してファイルアプリを起動するには以下のようなコードを呼び出します。

※ uri%A3はパスセパレーターです。

Intent intent = new Intent(Intent.ACTION_VIEW);

Uri uri = Uri.parse("content://com.android.externalstorage.documents/document/primary%3APictures");
intent.setData(uri);
if (intent.resolveActivityInfo(getPackageManager(), 0) != null)
{
startActivity(intent);
}else{
Toast.makeText( App.getContext(), "Failed to open file explorer", Toast.LENGTH_SHORT ).show();
}