2012-02-15 21 views
2

私は、ユーザーがデバイス上で可聴アラートを発することを許可するコードを持っています。 Android 2.3以降では、プログラムで音量を上げてAudioManager.setStreamVolumeで音を鳴らしてもアラートを出すことができます。しかし、今Android 3.x以降でこれをやろうとすると、ネイティブの音量調整ウィジェットが画面に現れますが、現在の音量はまだゼロのままです。以下のコードは次のとおりです。ハニカムの音楽ストリームの音量を上げることができません

int currentVolume = audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC); 
int maxVolume = audioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
audioMgr.setStreamMute(AudioManager.STREAM_MUSIC, false); 

// If the current volume is not set to the maximum level 
if (currentVolume < maxVolume) { 
    // Set the current volume to the maximum level 
    audioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume, AudioManager.ADJUST_RAISE); 
} 

私の質問は...何が、これは動作しなくなり、そのハニカムに変化しているのですか? setStreamVolumeの後にブレークポイントを設定し、手動でgetStreamVolumeを実行しました。それでもゼロに設定されていました。思考?

答えて

0

だから、setStreamVolumeは無視されますが、adjustStreamVolumeはそうではないようです。私はまだ非ハニカムデバイス上でより多くのテストをしなければならないが、これまでのところ、このコードが動作するように表示されます:ICS(アンドロイド4.0.3)で

while(audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC) < maxVolume) { 
    audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); 
} 
+0

これはAndroid 2.3でも機能しました。興味深いことに、私がこれをしたとき、Groovesharkアプリは私のところで強制的に終了し、私は当時それを使用していませんでした。 – MattC

3

問題が残っているが、同様に実用的なソリューションがあります。このコードを試してみてください:

// The commented code below works with 2.3, but not with 4.0 (ICS) 
//audioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, lvl, 0); 

// Use this instead 
while(audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC) > lvl) { 
    audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, 0); 
} 
while(audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC) < lvl) { 
    audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0); 
} 
関連する問題