Android Ringtone Play crash на 4.2


У меня возникли проблемы с воспроизведением мелодии звонка на моем Nexus 4 под управлением Android 4.2.

Когда я пытаюсь воспроизвести мелодию звонка, я вижу следующее исключение:

java.lang.NullPointerException at android.media.Ringtone.play(Ringtone.java:228)

Мой код ниже:

RingtoneManager ringtoneManager = new RingtoneManager(context);
ringtoneManager.setType(AudioManager.STREAM_NOTIFICATION);
Ringtone ringtone = ringtoneManager.getRingtone(index);
Ringtone ringtone.setStreamType(AudioManager.STREAM_NOTIFICATION);

if (ringtone != null)
{
    ringtone.play();
}

Значение индекса передается в мой метод, основанный на выборе пользователя (я представляю их со списком мелодий для выбора). В любом случае, не имеет значения, что я ставлю на это поведение всегда одно и то же.

Этот код отлично работает при запуске на двух других моих устройствах запуск 2.3 и 4.0.4.

Когда я отлаживаю, я вижу, что uri равен нулю В мелодии звонка, возвращаемой менеджером мелодий (и установлен в допустимое значение на других моих устройствах).

Я делаю что-то не так или это может быть ошибка в 4.2?

1 2

1 ответ:

Я думаю, вам нужно сначала проверить, существует ли мелодия звонка на позиции. Так что попробуйте

Edit: попробуйте это.

RingtoneManager ringtoneManager = new RingtoneManager(ActivityName.this);
ringtoneManager.setType(AudioManager.STREAM_NOTIFICATION);
Cursor c = ringtoneManager.getCursor();
Ringtone ringtone = ringtoneManager.getRingtone(index);
ringtone.setStreamType(AudioManager.STREAM_NOTIFICATION);
if(ringtone != null && ringtoneManager.getRingtoneUri(position) != null){    
    ringtone.play();
}