【问题标题】:Android Ringtone Play crash on 4.2Android 铃声播放在 4.2 上崩溃
【发布时间】:2012-12-13 14:50:56
【问题描述】:

我在运行 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 的设备上运行时完美运行。

当我调试时,我可以看到铃声管理器返回的铃声中的 uri 为空(并且在我的其他设备上设置为有效值)。

我做错了什么或者这可能是 4.2 中的错误吗?

【问题讨论】:

    标签: android android-4.2-jelly-bean ringtone


    【解决方案1】:

    我想您需要先检查该位置是否存在铃声。 所以试试

    编辑:试试这个。

    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 会返回一个 Ringtone 对象?
    • 好吧,你问错了位置。我不确定它为什么返回 Ringtone 对象,但我想检查铃声是否存在是程序员的责任
    • 我正在请求一个有效的位置,我已经尝试调整它以将其硬连线为零(例如)。结果总是一样的。
    • 尝试编辑,在获取铃声之前调用 ringtoneManager.getCursor
    • 这已经完成了工作,非常感谢!这是必需的,但它至少可以工作。
    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多