5

以下のコードを使用して、オーディオをストリーミングしていない限り、音量ボタンの使用を停止しました (そうしないと、呼び出し音の音量が煩わしく変更されます) が、[戻る] ボタンは機能しません。

「戻る」を押すと、携帯電話のデスクトップに到達するはずです(または、期待どおりにアプリを終了します)が、何もしません。メニューを開いた場合、[戻る] をクリックするとメニューが閉じますが、アプリを離れることができません。

コードをアプリ内の他のアクティビティにコピーしました。アプリ内で別のアクティビティを開くと、「戻る」ボタンが機能しないため、メイン画面に戻ることができません:)

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    //Suppress the use of the volume keys unless we are currently listening to the stream
    if(keyCode==KeyEvent.KEYCODE_VOLUME_UP) {
        if(StreamService.INT_PLAY_STATE==0){
            return true;
        }else{
            return false;
        }
    }
    if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN) {
        if(StreamService.INT_PLAY_STATE==0){
            return true;
        }else{
            return false;
        }
    }
return false;

なぜこうなった?

4

4 に答える 4

5

テストしていませんが、super.onKeyDown を呼び出す場所に else を含める必要があると思います。

if(keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
   code
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
   more code
} else {
   super.onKeyDown(keyCode, event);
}

それ以外の場合は、すべてのキーコードをキャプチャし、ボリューム コードを確認した後に false を返します。

于 2011-03-26T23:09:47.667 に答える
5

ボリューム キーで常にメディア ボリュームを制御する、より簡単で堅牢な方法は、次の行をアクティビティの に挿入することonCreate()です。

setVolumeControlStream(AudioManager.STREAM_MUSIC);
于 2011-03-27T01:10:34.287 に答える
4

おい、そのアクティビティのオーディオ コンテキストをメディア ボリュームに変更するだけです。

http://developer.android.com/reference/android/media/AudioManager.html

編集:

private AudioManager audio;

onCreate の内部:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

onKeyDown をオーバーライドします。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
    case KeyEvent.KEYCODE_VOLUME_UP:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
        return true;
    default:
        return false;
    }
}
于 2011-03-27T00:17:48.540 に答える