0

メディア プレーヤーを使用してサウンド ファイルを再生しています。2.2 と 2.3 では問題なく動作していますが、ICS 4.0.3 では動作しません。モバイルがサイレント モードになっていないことを確認しました。私のコードは次のとおりです。

private MediaPlayer mediaPlayer;
private void playSound(int soundType) {
    try {
        mediaPlayer = MediaPlayer.create(this, R.raw.beep);
        if (!mediaPlayer.isPlaying()) {
            mediaPlayer.start();
        }
        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                mediaPlayer.release();
            }
        });
    } catch (IllegalStateException e) {
        e.printStackTrace();
    }
}
4

2 に答える 2

0

これは私のアプリで使用するコードです。ICSでは正常に機能しています。

public void playWelcomeAudio(){

    Thread t = new Thread()
    {
        @Override
        public void run() {

                AssetFileDescriptor afd = getApplicationContext().getResources().openRawResourceFd(R.raw.welcome); 


                try {
                    if(afd!=null)
                    {
                        UtilLog.d(TAG, "INIT MEDIA PLAYER");
                        welcomeAudio = new MediaPlayer();
                        welcomeAudio.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
                        welcomeAudio.prepare();
                        welcomeAudio.start();
                    }
                } catch (Exception e) {
                    UtilLog.e(TAG, "Audio error", e);
                }

        }
    };
    t.start();
}

スレッドを削除できます。必須ではありません。

于 2012-05-30T18:51:25.070 に答える
0

ICS の音はこんな風に再生されます : (以前の投稿からコピーしたので、変なところがあったらごめんなさい)

AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
int mSoundID = mSoundPool.load(this, R.raw.sound1, 1);
float lActualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
float lMaxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float lVolume = lActualVolume / lMaxVolume;
// Is the sound loaded already?
if (mSoundIsLoaded) {
     mSoundPool.play(mSoundID, lVolume, lVolume, 1, 0, 1f);
}

assets/raw ディレクトリにサウンド ファイルを配置する必要があります。

編集: mSoundIsLoaded パラメーターがどこから来たのかを言及するのを忘れていました。サウンドがロードされたときに設定します。これは onCreate メソッドで行います。サウンドがロードされると、mSoundIsLoaded というブール フィールドを設定します。サウンドを再生するときに NullPointerExceptions を防ぐためにこれを行います。サウンドのロードは次のようになります。

mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
         mSoundIsLoaded = true;
    }
});
mSoundID = mSoundPool.load(this, R.raw.sound1, 1);
于 2012-05-29T11:19:28.670 に答える