@覆盖
公共布尔dispatchKeyEvent(KeyEvent的事件){
INT行动= event.getAction();
INT键code = event.getKey code();
开关(钥匙code){
案例KeyEvent.KEY code_VOLUME_UP:
如果(动作== KeyEvent.ACTION_UP){
//去做
}
返回true;
案例KeyEvent.KEY code_VOLUME_DOWN:
如果(动作== KeyEvent.ACTION_DOWN){
//去做
}
返回true;
默认:
返回super.dispatchKeyEvent(事件);
}
}
这code在工作时屏幕上。但不是当屏幕被锁定。有没有办法让当屏幕被锁定音量键事件?
解决方案的事件仅触发时,屏幕on..other明智的root权限是必要的。
请一个BroadcastReceiver扩展分类
公共类YourBoardcastReceiver扩展的BroadcastReceiver {
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
Log.e(得到的东西,我不知道是什么!);
串intentAction = intent.getAction();
KeyEvent的事件= NULL;
如果(Intent.ACTION_MEDIA_BUTTON.equals(intentAction)){
事件=(KeyEvent的)意图
.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
}
如果(事件== NULL){
返回;
}
INT键code = event.getKey code();
INT行动= event.getAction();
长eventtime = event.getEventTime();
如果(键code == KeyEvent.KEY code_MEDIA_PLAY_PAUSE
||关键code == KeyEvent.KEY code_HEADSETHOOK){
如果(动作== KeyEvent.ACTION_DOWN){
//此处开始您的应用程序!
// ...
Log.e(事件/////,Trigerd);
如果(isOrderedBroadcast()){
abortBroadcast();
}
}
}
}
}
}
而在你的清单:
<接收器的Android版本:NAME =YourBoardcastReceiver>
<意向滤光器>
<作用机器人:名称=android.intent.action.SCREEN_ON/>
&所述; /意图滤光器>
< /接收器>
和调用它。
mAudioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
mRemoteControlResponder =新的组件名(getPackageName()
YourBoardcastReceiver.class.getName());
@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);
}
}
This code is working when screen is on. But not when screen is locked. Is there a way to get the volume key event when the screen is locked?
解决方案The event only trigger when the screen is on..other wise root permission is needed.
Make a BroadcastReceiver extended class
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();
}
}
}
}
}
}
And in your Manifest :
<receiver android:name="YourBoardcastReceiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_ON" />
</intent-filter>
</receiver>
and Call it like this.
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
mRemoteControlResponder = new ComponentName(getPackageName(),
YourBoardcastReceiver.class.getName());