Итак, я не хочу делать простое приложение для записи, в котором пользователь может выбрать предпочитаемое место сохранения. Я планирую получить Uri выбранного каталога через Intent.ACTION_OPEN_DOCUMENT_TREE, сохранить и обработать его с помощью InputStream и MediaRecorder.
Когда я пытаюсь обработать Result в моем onActivityResult,
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == resources.getInteger(R.integer.request_code_preference_storage) &&
resultCode == Activity.RESULT_OK){
val uri = data!!.data
val inputstream = InputStreamHelper.readTextFromUri(uri!!, context!!)
}
я получаю следующую ошибку:
java .lang.RuntimeException: Failure выдача результата ResultInfo {who = null, request = 65537, result = -1, data = Intent {dat = content: //com.android.externalstorage.documents/tree/primary: Download flg = 0xc3}} в действие { de.ur.mi.audidroid / de.ur.mi.audidroid.views.MainActivity}: java .lang.IllegalArgumentException: недействительный URI: content: //com.android.externalstorage.documents/tree/primary% 3Загрузить
Я не знаю, почему это не займет ури. DocumentFile примет это без каких-либо жалоб через DocumentFile.fromTreeUri(context!!,uri!!)
.
InputStreamHelper - это объект, который я в основном скопировал непосредственно из документации .
object InputStreamHelper{
fun readTextFromUri(uri: Uri, context: Context): String {
val stringBuilder = StringBuilder()
context.contentResolver.openInputStream(uri)?.use { inputStream ->
BufferedReader(InputStreamReader(inputStream)).use { reader ->
var line: String? = reader.readLine()
while (line != null) {
stringBuilder.append(line)
line = reader.readLine()
}
}
}
return stringBuilder.toString()
}
}
Я в замешательстве и растерянности. Ничего сложного, но я наткнулся на контрольно-пропускной пункт.