听起来不适用于Nexus 5 Android 5.0(棒棒糖)

时间:2015-01-02 01:02:55

标签: android audio android-5.0-lollipop

在我的应用程序中,我有以下代码:

       try {
            AssetFileDescriptor afd = context.getAssets().openFd(SOUNDS + filePath + MP3);
            MediaPlayer mediaPlayer = new MediaPlayer();
            if (useMediaVolume) {
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            } else {
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
            }
            mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
            mediaPlayer.setOnPreparedListener(prepareListener);
            mediaPlayer.prepareAsync();
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (SecurityException ex) {
            MonitorDataHelper.logException(ex);
            ex.printStackTrace();
        }

private MediaPlayer.OnPreparedListener prepareListener = new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mediaPlayer) {
        mediaPlayer.setOnCompletionListener(completionListener);
        mediaPlayer.start();
    }
};

private MediaPlayer.OnCompletionListener completionListener = new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
        mediaPlayer.stop();
        mediaPlayer.release();
    }
};

它可以在5.0之前甚至是Nexus 7 Android 5.0上运行,但根据用户报告,它不适用于Nexus 5.

声音文件很小 - 为国际象棋游戏移动声音。 Windows显示他们的长度像00:00:00,但他们玩得很好。 VBR约为100kbs:

enter image description here

在第一次报道之前我开始玩asyncPrepare,并且它在棒棒糖前工作,但即使在Nexus 7上也没有在棒棒糖上工作。现在它适用于我的Nexus 7(5.0.2)但根据用户不在Nexus 5上。

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

终于找到了问题的原因:长度小于300毫秒的声音文件在某些​​设备上无法在Android 5.0中播放(Genymotion Nexus 5/6已经过时)。所以解决方案是通过向文件本身添加静音来创建更长的文件。