2013-04-22 91 views
3
@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 
    int action = event.getAction(); 
    int keyCode = event.getKeyCode(); 
     switch (keyCode) { 
     case KeyEvent.KEYCODE_VOLUME_UP: 
      if (action == KeyEvent.ACTION_UP) { 
       //TODO 
      } 
      return true; 
     case KeyEvent.KEYCODE_VOLUME_DOWN: 
      if (action == KeyEvent.ACTION_DOWN) { 
       //TODO 
      } 
      return true; 
     default: 
      return super.dispatchKeyEvent(event); 
     } 
    } 

此代码在屏幕打开时工作。但屏幕锁定时不行。屏幕锁定时有没有办法获得音量按键事件?如何在屏幕锁定时获取音量按键事件?

+0

解锁屏幕时要触发它 – itsrajesh4uguys 2013-04-22 10:03:04

+0

但我需要它,而锁定 – user2306862 2013-04-22 10:09:07

+0

我的意思解锁programmatcally .. – itsrajesh4uguys 2013-04-22 10:12:22

回答

3

该事件仅在屏幕打开时触发..其他明智的根权限是必需的。

做一个BroadcastReceiver扩展分类

public class YourBoardcastReceiver extends BroadcastReceiver { 
       @Override 
       public void onReceive(Context context, Intent intent) { 


Log.e("get something", "i dont know what!!"); 

     String intentAction = intent.getAction(); 
     KeyEvent event = null; 
     if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { 
      event = (KeyEvent) intent 
        .getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
     } 

     if (event == null) { 
      return; 
     } 

     int keycode = event.getKeyCode(); 
     int action = event.getAction(); 
     long eventtime = event.getEventTime(); 

     if (keycode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE 
       || keycode == KeyEvent.KEYCODE_HEADSETHOOK) { 
      if (action == KeyEvent.ACTION_DOWN) { 
       // Start your app here! 

       // ... 
       Log.e("event/////", "Trigerd"); 

       if (isOrderedBroadcast()) { 
        abortBroadcast(); 
       } 
      } 
     } 
    } 
       } 
     } 

而在你的清单:

<receiver android:name="YourBoardcastReceiver"> 
       <intent-filter> 
         <action android:name="android.intent.action.SCREEN_ON" /> 
       </intent-filter> 
</receiver> 

,并这样称呼它。

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    mRemoteControlResponder = new ComponentName(getPackageName(), 
      YourBoardcastReceiver.class.getName()); 
+0

我不明白:这是OP的答案吗?顶部的文字有点含糊不清:当屏幕被锁定时,它是否实际上不调用回调'onReceive'? – 2016-11-20 19:21:55