安卓4.2系统中,铃声播放崩溃问题

3

我在运行Android 4.2的Nexus 4上播放铃声时遇到了问题。

当我尝试播放铃声时,我看到了以下异常信息:

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的其他设备上运行时,此代码完美运行。
调试时,我可以看到Ringtone Manager返回的铃声中的URI为null,并且在我的其他设备上设置为有效值。
我是否做错了什么,或者这可能是4.2中的错误?
1个回答

3

我猜你需要先检查铃声是否存在于该位置。所以试着这样做:

编辑:尝试这个。

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

这将阻止我的崩溃,但并不能解决我无法播放铃声的问题。如果我无法播放铃声,为什么RingtoneManager会返回一个铃声对象呢? - JamieH
好的,你正在询问错误的位置。我不确定为什么它返回了Ringtone对象,但我猜这是程序员的责任来检查铃声是否存在。 - nandeesh
我正在请求一个有效的位置,并尝试将其调整为零(例如,硬连线)。结果总是相同的。 - JamieH
在获取铃声之前,请尝试编辑并调用RingtoneManager.getCursor。 - nandeesh
已经完成了这项工作,非常感谢!虽然需要这样做很糟糕,但至少它能够正常工作。 - JamieH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接