2012-11-03 67 views
1

我正在使用Android音樂播放器,並且想要使用長按音量鍵跳過曲目。 我發現了一些實現,但沒有一個按我想要的方式工作。 我想在長按時跳過歌曲,並在短按(正常行爲)時更改音量。 在所有教程/答案中,他們用onKeyDownonKeyLongPress長按處理,但短/正常按僅記錄在onKeyUpAndroid onKeyLongPress

@Override 
public boolean onKeyLongPress(int keyCode, KeyEvent event) { 
    Log.d(TAG, "long pressed"); 
    switch(keyCode){ 
    case KeyEvent.KEYCODE_VOLUME_UP: 
     songNumber++; 
     playSong(songs.get(songNumber)); 
     return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     songNumber--; 
     playSong(songs.get(songNumber)); 
     return true; 
    } 
    return super.onKeyLongPress(keyCode, event); 
} 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch(keyCode){ 
    case KeyEvent.KEYCODE_VOLUME_UP: 
     event.startTracking(); 
     return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     event.startTracking(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    switch(keyCode){ 
    case KeyEvent.KEYCODE_VOLUME_UP: 
     return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 

這是我的代碼,但與此我只能跳過歌曲和短按沒有任何影響。所以,我只有一個音量電平:(

我不知道現在是什麼嘗試。幫助表示讚賞。 謝謝!

-v1r0x

+0

你應該張貼您的解決方案作爲一個答案,並接受它 – Sam

+0

我解決方案是「編輯」下面的塊。 我該如何接受它?我是新來的stackoverflow – v1r0x

+0

只需將你的解決方案從你的問題中剪切並粘貼到答案上,就會有一個大的綠色複選標記點擊它接受它。這樣,任何人尋找類似問題的答案都可以看到這個問題已經在問題之外得到了回答。任何發現你的答案有用的人都可以贊成它並給你一些聲望點。 :) – Sam

回答

1

好吧,我已經找到了解決辦法。沒有最好,但它的工作原理 OnKeyDownOnKeyLongPress仍然是相同的,但現在OnKeyUp是這樣的:。

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if(!event.isCanceled()){ 
     switch(keyCode){ 
     case KeyEvent.KEYCODE_VOLUME_UP: 
      audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); 
      break; 
     case KeyEvent.KEYCODE_VOLUME_DOWN: 
      audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); 
      break; 
     } 
    } 
    return super.onKeyUp(keyCode, event); 
}