KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

androidでファイルの取得

アンドロイドのファイル操作がコロコロ変わる問題

 情報漏洩があるたびにアプリの制作者側に変更しなければならないことが増える。ターゲットレベルを上げないと検索で出てこなくなる。ターゲットレベルをガルとアプリが動かなくなる。本来はOS側が対応するべきことをアプリ制作者側に丸投げしている。

intentの結果の受け取り方が変わったらしい。

'startActivityForResult(android.content.Intent, int)' is deprecated startActivityForResultは廃止予定です。

qiita.com

ラムダ式に書き換えたのとmimetypeを複数選択可能にした。

        findViewById(R.id.button).setOnClickListener(v -> {
            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            String[] mimeTypes ={
                            "text/plain",
                            "application/zip"};
            intent.setType("*/*").putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
            Intent chooserIntent = Intent.createChooser(intent, "ファイルの選択");
            _launcherSelectFile.launch(chooserIntent);
        });
    ActivityResultLauncher<Intent> _launcherSelectFile = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                Charset cs;
                String text = "";
                TextView textArea = findViewById(R.id.textView);
                if (result.getResultCode() == RESULT_OK) {
                    Intent resultData = result.getData();
                    if (resultData != null) {
                        Uri uri = resultData.getData();
                    }
                }
            });

intentから複数ファルのmimetyeの指定

          String[] mimeTypes ={
                            "text/plain",
                            "application/zip"};
            intent.setType("*/*").putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);

stackoverflow.com

uriからファイル名の取得。ファイル名を取得できるが絶対パスが取得できないので、ファイルを別の処理に渡せない。

                  Uri uri = resultData.getData();
                        String[] projection = {MediaStore.MediaColumns.DISPLAY_NAME};
                        String path = null;
                        Cursor cursor = this.getContentResolver().query(uri, projection, null, null, null);
                        if (cursor != null) {

                            if (cursor.moveToFirst()) {
                                path = cursor.getString(0);
                            }
                            cursor.close();
                        }
                        File file = new File(path);
                        System.out.println("filename:" + path);
                        System.out.println("filename:" + file.getPath());

receptorinc.hatenablog.jp

getExternalStorageDirectory() This method was deprecated in API level 29.

sibainu.lsv.jp