Androidアプリ開発

SAFのデフォルトフォルダを指定する
EXTRA_INITIAL_URI

この記事は約10分で読めます。
記事内に広告が含まれています。
スポンサーリンク

この記事は Androidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Java での開発経験、XML構文規則、Android のアプリ開発経験がある方を対象としています。
Android のアプリ開発でお役にたててれば、嬉しいです。
(これから Android のアプリ開発や Java での開発を始めたい方への案内は、
記事の最後で紹介します)

この記事のテーマ


Storage Access Framework(SAF)のデフォルトフォルダを指定する

SIMフリーのモバイルWiFiを検討していならこれがオススメです。

ポイント

Storage Access Framework(SAF)を使用することで、共有ストレージのファイルにアクセスすることができます。
ファイル作成の場合はACTION_CREATE_DOCUMENT、ファイルを開く場合はACTION_OPEN_DOCUMENTIntentにセットして呼び出すことで、フォルダやファイルを指定するピッカーを起動します。
今回はピッカーのデフォルトフォルダを指定する方法を紹介します。

共有ストレージのドキュメントやファイルにアクセスする

EXTRA_INITIAL_URI

デフォルトフォルダを指定は、IntentEXTRA_INITIAL_URIでデフォルトフォルダのUriを指定します。
ピッカーで指定したファイルのUriは、ActivityResultLauncherで取得します。

    :
    private final ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == Activity.RESULT_OK) {
            Bitmap bitmap = null;
            int angle = 0;
            switch (itemId) {
                :
                case R.id.menu32:
                    if (Objects.requireNonNull(result.getData()).getData() != null) {
                        new ExternalStorageWriter(context).imageFileCopy(result.getData().getData(), FILE_NAME, 2);
                        :
                   }
                    break;
                    :
            }
            :
        }
    });
    :
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        :
        ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(view1.getContext(), R.style.PopupMenu);
        Pupup popup = new PopupMenu(contextThemeWrapper, view1);
        popup.setOnMenuItemClickListener(item -> {
            itemId = item.getItemId();
            Intent intent;
            Bundle bundle1 = new Bundle();
            switch (itemId) {
                :
                case R.id.menu31: // イメージ選択
                    intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                    intent.addCategory(Intent.CATEGORY_OPENABLE);
                    intent.setType("image/*");
                    intent.putExtra(EXTRA_INITIAL_URI, Uri.parse("content://com.android.externalstorage.documents/document/primary%3AAndroid%2Fmedia%2Fcom.jiseifirm.imgsaw%2F"));
                    activityResultLauncher.launch(intent);
                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
                        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
                    }
                    break;
                    :

ポップアップメニューのイメージ選択でピッカーを表示、ピッカーで指定したファイルをコピーしています。
ExternalStorageWriterはファイルをコピーするクラスです。

EXTRA_INITIAL_URIに指定するフォルダの表記がポイントです。

content://com.android.externalstorage.documents/document/primary%3A%2F%2F%2F

内部ストレージ > ①Android > ②media > ③com.jiseifirm.imgsaw

…/document/primary%3AAndroid%2Fmedia%2Fcom.jiseifirm.imgsaw%2F

内部ストレージ > ①Pictures

…/document/primary%3APictures%2F

内部ストレージ > ②Download

…/document/primary%3ADownload%2F

EXTRA_INITIAL_URIの指定とピッカーのカテゴリで指定したフォルダ名の表記は異なります。
デフォルトフォルダを指定しない場合(指定フォルダの誤りを含む)、前回のフォルダをデフォルトフォルダとして動作するので注意が必要です。

今回は、ここまでです。

SAFのデフォルトフォルダを指定しているAndroidアプリです。

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちらから、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、Android のアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。

未経験者からシステムエンジニアを目指すのに最適です。まずは無料相談から♪

未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています。お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪

スポンサーリンク
msakiをフォローする
スポンサーリンク

コメント欄

タイトルとURLをコピーしました