2012-03-19 58 views
3

私のアプリケーションでメッセージを受け取ったときにビープ音を鳴らそうとしています。このビープ音は、マスター電話通知音量レベル(リンガー音量ではありません)を尊重する必要があります。つまり、電話通知のボリュームが3/10の場合、ビープ音の強さは3/10になります。 私はMediaPlayerボリュームの問題 - AudioStreamの問題

AudioManager audioMan = (AudioManager) context 
      .getSystemService(Context.AUDIO_SERVICE); 
    int volume; 

    if (mPlayer == null) { 
     mPlayer = MediaPlayer.create(context, R.raw.mytone); 
    } 

    if (mPlayer.isPlaying()) { 
     mPlayer.stop(); 
     mPlayer.release(); 
     mPlayer = MediaPlayer.create(context, R.raw.mytone); 

    } 

    volume = audioMan.getStreamVolume(AudioManager.STREAM_NOTIFICATION); 

    mPlayer.setVolume(volume, volume);//this doesn't work for me, beep sound is taking media player volume by default. 

    mPlayer.setOnErrorListener(new OnErrorListener() { 
     @Override 
     public boolean onError(MediaPlayer player, int what, int extra) { 
      player.stop(); 
      player.reset(); 
      return true; 
     } 
    }); 

    if (mVibrator == null) 
     mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 

    mVibrator.cancel(); 

、あなたの知識を共有し、私に指示を与えてくださいすることができ、これを達成することはできませんよ。ありがとうございました。

答えて

4

AudioManager.STREAM_MUSICへの参照先の音楽ストリームであなたのサウンドが再生されているようです。音量レベルを変更すると、そのストリームで再生されたすべてのレベルが変更されます。これが、音楽/メディアの再生が「騒がれた」理由です。

リンガーストリーム(および音量設定)を使用する場合は、代わりにAudioManager.STREAM_RINGを使用する必要があります。これを試したとしますが、与えたコードスニペットは音量を調整するだけです。音を再生する前にMediaPlayerを作成して設定する方法は示されていません。

MediaPlayerインスタンスを設定するときは、適切なストリームを選択する必要があります。あなたが説明しているようなシナリオでさまざまなストリームをうまく使っているので、これはあなたの問題がある場所です。音楽のほかに - ユーザー自身のためにストリームを選択するオプションを提供するために

// Get a reference to the MP3 file to play 
AssetFileDescriptor afd = getContext().getResources().openRawResourceFd(R.raw.my_mp3); 

// Create the media player 
MediaPlayer mediaPlayer = new MediaPlayer(); 

// Give it the MP3 you want played 
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 

// Set the audio stream to play over 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING); 

// Now play the sound 
mediaPlayer.prepare(); 
mediaPlayer.start(); 

その良い練習:カスタムビープ音が再生され、その上のオーディオストリームを選択するには、このようなあなたのMediaPlayerインスタンス上setAudioStreamを使用リンガーストリームにはアラームと通知のストリームがあり、それぞれに独立した音量レベルがあります(他のものもありますが、これらは主要なものです)。 AudioManager hereのAndroidドキュメントをご覧ください。

+0

'mediaPlayer.setDataSource(afd ...')の後に 'afd.close(); 'で閉じてください –

+0

確かですが、これは完全な解決策ではありません。 – Phil