我在运行Android4.2的Nexus4上播放铃声时遇到问题。
当我尝试播放铃声时,我看到以下异常:

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中的一个错误吗?

最佳答案

我猜你需要先检查这个位置是否存在铃声。
所以试试看
编辑:试试这个。

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();
}

10-08 14:01