Android MediaPlayer在某些平台上无法播放声音

时间:2011-01-27 18:28:19

标签: android audio media-player android-audiomanager

我目前正在开发一款Android应用程序,可以不同的时间间隔向用户播放声音。我有工作代码(包括在下面),其功能与我的Hero(运行2.2)和1.6仿真器上的预期完全相同。但是,它对我的​​朋友Xperia x8不起作用 - 没有播放声音。他有一个通知音设置,当他收到文本等时播放正常。

private void prepareAudio(){
    alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    mp = new MediaPlayer();
    if(alert != null){
        try {
            mp.setDataSource(ctx, alert);
        } catch (IllegalArgumentException e) {
            Log.i("Prepare Audio", e.getMessage());
        } catch (SecurityException e) {
            Log.i("Prepare Audio", e.getMessage());
        } catch (IllegalStateException e) {
            Log.i("Prepare Audio", e.getMessage());
        } catch (IOException e) {
            Log.i("Prepare Audio", e.getMessage());
        }
    }
    am = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE);
}

private void notifyUser(){
    if(alert != null){
        if (am.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
            mp.setAudioStreamType(AudioManager.STREAM_ALARM);
            mp.setLooping(false);
            try {
                mp.prepare();
            } catch (IllegalStateException e) {
                Log.i("Notify User", e.getMessage());
            } catch (IOException e) {
                Log.i("Notify User", e.getMessage());
            }
            mp.start();
        } else {
            Log.i("Notify User", "Alarm volume zero");
        }
    } else {
        Log.i("Notify User", "Uri is null");
    }
    long[] pattern = {0,200,300,600}; 
    v.vibrate(pattern, -1);
}

初始化类时会调用PrepareAudio,每次我们想播放声音时都会调用notifyUser。电话总是应该振动,所以通常会调用notifyUser。

我朋友安装的版本使用的是e.printStackTrace而不是Log.i,所以在logcat中没有任何东西被吐出来。我将尝试抓住他的手机将其更新为带有Log.i的版本,但与此同时代码中是否有任何明显错误可能导致这种间歇性问题?

谢谢,

2 个答案:

答案 0 :(得分:2)

事实证明,更新原始帖子中列出的异常处理似乎解决了问题。

如果您正在使用上述代码,那么值得注意的是,有时e.getMessage()会返回null,而不是

Log.i("Notify User", e.getMessage());

使用

Log.i("Notify User", e.getMessage() + "");

在抛出异常时避免任何讨厌的FC。

对于偶然无法回答的问题感到抱歉!

答案 1 :(得分:0)

不确定,但旧版本的Android在播放WAV文件时遇到问题。您尝试播放这些WAV文件或MP3文件吗?