Пользователь выбирает любой рингтон с устройства, этот рингтон проигрывается при наступлении какого-то события.
До 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 и если они были получены в рамках жизни процесса, то доступ по ним к файлам есть, а если не были, то и доступа нет.
Как теперь быть? Я не могу просить юзера после каждого запуска приложения выбирать рингтон заново.