Как извлечь Uri из намерения из ACTION_RINGTONE_PICKER - PullRequest
0 голосов
/ 04 октября 2018

Я недавно начал кодировать свой действительно первый проект Android с использованием Android Studio 3.1.2 и SDK 19.

Один из моих фрагментов открывает Средство выбора мелодии звонка с помощью Intent, используя Intent(RingtoneManager.ACTION_RINGTONE_PICKER), поэтому пользователь может выбрать мелодию звонка,который Ури затем сохранит в SharedPreferences.Средство выбора открывается, как и ожидалось, но после того, как я выбрал мелодию звонка и нажал «ОК», я получаю исключение RuntimeException:

java.lang.RuntimeException: Failure delivering result ResultInfo
{who=null, request=65537, result=-1, data=Intent { (has extras) }} to activity 
{com.procra.myProject/com.procra.myProject.Activities.MainActivity}: 
java.lang.NullPointerException: uriString

При получении результата средства выбора я передаю Намерение результата своему SettingsHandler,где setNotificationRingtone() должен заботиться о выбранном тоне, как показано ниже:

public synchronized static void setNotificationRingtone(Context context, Intent data) {
    SharedPreferences sharedPreferences = context.getSharedPreferences(NOTIFICATION_SETTINGS, Context.MODE_PRIVATE);
    sharedPreferences.edit().putString(NOTIFICATION_RINGTONE_URI , data.getStringExtra("uriString")).apply();
    //this is the one I suspect to be the troublemaker
    RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_NOTIFICATION, Uri.parse(data.getStringExtra("uriString")));
}

Если я понял это правильно, я каким-то образом неправильно понял структуру Intent data, возвращается метод onActivityResult().Я пытался найти понятный ответ здесь, но ни один из них не соответствовал моему вопросу.

Буду признателен, если кто-нибудь сможет объяснить, как правильно извлечь результат из намерения и как анализировать соответствующие данные из намерения в Uri.Спасибо вперед.

1 Ответ

0 голосов
/ 04 октября 2018

из документов: https://developer.android.com/reference/android/media/RingtoneManager.html#ACTION_RINGTONE_PICKER

Вывод: EXTRA_RINGTONE_PICKED_URI.

, поэтому замените data.getStringExtra("uriString") на data.getStringExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)

, чтобы проверить, поместите ли точку отладки в onActivityResult и использовать отладчик для проверки возвращенного намерения

...