First_Spectr
@First_Spectr
Студент

Как в Android 11 получить доступ к файлу по URI?

Пользователь выбирает любой рингтон с устройства, этот рингтон проигрывается при наступлении какого-то события.
До 11 андроида идеально работал следующий код:

fun onSomeEvent() {
    val uri = preferences.ringtoneUri
    val ringtone = RingtoneManager.getRingtone(appContext, uri)
    ringtone.play()
}

fun onChangeRingtoneClick() {
    val intent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER)
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION)
    startActivityForResult(intent, REQUEST_CODE)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
        preferences.ringtoneUri = data?.extras?.get(EXTRA_RINGTONE_PICKED_URI)
    }
}


В 11 андроиде доступ по URI есть только после выбора рингтона юзером (Вызова onChangeRingtoneClick). Если приложение перезапустить, то доступ по URI пропадёт и пользователю снова надо его выбрать.

URI всегда один и тот же (Юзер выбирает один и тот же рингтон), но до его получения, через onActivityResult , доступа к рингтону нет, а после есть.

То есть, как я понял, теперь андроид запоминает, какие uri были получены в onActivityResult и если они были получены в рамках жизни процесса, то доступ по ним к файлам есть, а если не были, то и доступа нет.

Как теперь быть? Я не могу просить юзера после каждого запуска приложения выбирать рингтон заново.
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы