【Kotlin】StorageAccessFrameworkを使ってメモを保存・読み込みする

入力したテキストをファイルとして保存するアプリを作ってみました。

メモ入力画面
メモをファイルに保存する画面、ファイル名を変更できる
メモを読み込みする画面、読み込むメモを選択できる

ファイル保存も読み込みもインテントでファイル選択画面を呼び出して処理する流れは同じです。

ファイル保存

データ書き込み処理を記載します。

        val startForResult = registerForActivityResult(
            ActivityResultContracts.StartActivityForResult()){ result ->
                if(result.resultCode == RESULT_OK){
                    result.data?.data?.let {
                        contentResolver.openOutputStream(it)?.
                        bufferedWriter()?.use {
                                it.write(edText.text.toString())
                            }
                    }
                }
        }

インテントを指定して呼び出します。

        btnSave.setOnClickListener {
            startForResult.launch(
                Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
                    type = "text/plain"
                    putExtra(Intent.EXTRA_TITLE,"memo.txt")
                }
            )
        }

ファイル読み込み

ファイルに書かれたテキストを読み込んで、表示する処理を書きます。

        val startForResult2 = registerForActivityResult(
            ActivityResultContracts.StartActivityForResult()){ result ->
            if(result.resultCode == RESULT_OK){
                result.data?.data?.let {
                    val str = StringBuilder()

                    contentResolver.openInputStream(it)
                        ?.bufferedReader()?.forEachLine {
                            str.append(it)
                            str.append(System.getProperty("line.separator"))
                        }
                    edText.setText(str.toString())
                }
            }
        }

呼び出しは保存する時と同じです。

        btnRead.setOnClickListener {
            startForResult2.launch(
                Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
                    type = "text/plain"
                    putExtra(Intent.EXTRA_TITLE,"memo.txt")
                }
            )
        }

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog