我正在Android Studio中开发一种简单的应用程序,我希望有一个代码可以检测到按下耳机按钮的时间(然后引出并动作)。
我一直在网上搜索并在任何地方搜索,而且我找到的所有脚本都没有用。
由于Android版本的问题,或者因为代码只是"变红"而且由于我不知道的原因,它只是不起作用。 我非常绝望和需要那些代码。如果有人能够分享一个,我会非常感激。
例如,这是我正在使用的代码:
public static class MediaButtonIntentReceiver extends BroadcastReceiver {
// int E=0;
public MediaButtonIntentReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { //Si la acción capturada en intentaction no equivale a una puñsación de boton entonces sale de el método debido al return
MainActivity.E= 7;
return;
}
KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); //extra key se refiere a el de los auriculares
if (event == null) { //Si event es null, return. Event equivale a extrakeyevent. osea que si no hay extrakey event, return
MainActivity.E= 7; return;
}
int action = event.getAction();
if (action == KeyEvent.ACTION_DOWN) { //Lo que hará cuando sea pulsado
MainActivity.E= MainActivity.E+1;
// do something
}
abortBroadcast();
}
}
清单中有以下内容:
<receiver android:name="OuterClass$MediaButtonIntentReceiver">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
问题是,当我运行应用程序时,我按下耳机的媒体按钮,Android的MediaPlayer没有任何反应(通常应该发生),这表明,事实上,应用程序在Android的mediaPlayer上具有这些按钮的优先级。然而,应用程序中没有任何事情发生在按下(当它应该发生什么时)。我还要补充一点,当媒体很长时,谷歌的一种应用程序就会被打开。我对长按不感兴趣。
此外,我必须提到,从我提取的地方开始,除了已经看到的代码之外还有更多的代码,例如有类似的东西:
//AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//ComponentName mReceiverComponent = new ComponentName(this, MediaButtonIntentReceiver.class);
//mAudioManager.registerMediaButtonEventReceiver(mReceiverComponent);
// mAudioManager.unregisterMediaButtonEventReceiver(mReceiverComponent);
(这些线被我丢弃了) 无论如何,这段代码不起作用,因为Android工作室说他们已经过时了。
我还发现:
// BroadcastReceiver MediaButtonIntentReceiver = new MediaButtonIntentReceiver(); // MediaButtonIntentReceiver mMediaButtonReceiver = new MediaButtonIntentReceiver(); // IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); //mediaFilter.setPriority(1000000000); // registerReceiver(mMediaButtonReceiver,mediaFilter);
我把它放在MainActivity的onCreate中。也没用。
我在本论坛的另一个问题中找到了最后一个代码。 代码的某些部分以红色显示不起作用(回调,返回true(并显示&#34;返回外部方法&#34;)...)
MediaSession audioSession = new MediaSession(getApplicationContext(),&#34; TAG&#34;); audioSession.setCallback(new MediaSession.Callback){
//@Override
public static boolean onMediaButtonEvent(final Intent mediaButtonIntent) {
String intentAction = mediaButtonIntent.getAction();
if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
KeyEvent event = mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event != null) {
stopTimeOfGame_millis = event.getDownTime();
double usersReactionTime = (event.getDownTime() - startTimeOfGame_millis) / 1000.0;
UtilsRG.info("event.getDownTime(): " + usersReactionTime);
double getEventTime = (event.getEventTime() - startTimeOfGame_millis) / 1000.0;
UtilsRG.info("event.getEventTime(): " + getEventTime);
int action = event.getAction();
if (action == KeyEvent.ACTION_DOWN) {
long action_down = android.os.SystemClock.uptimeMillis();
double actionDown = (action_down - startTimeOfGame_millis) / 1000.0;
UtilsRG.info("ACTION_DOWN: " + actionDown);
}
if (action == KeyEvent.ACTION_UP) {
long action_up = android.os.SystemClock.uptimeMillis();
double actionUp = (action_up - startTimeOfGame_millis) / 1000.0;
UtilsRG.info("ACTION_UP: " + actionUp);
}
}
}
return true;
}
};
在此,我还添加了:
PlaybackState state = new PlaybackState.Builder()
.setActions(PlaybackState.ACTION_PLAY_PAUSE)
.setState(PlaybackState.STATE_PLAYING, 0, 0, 0)
.build();
audioSession.setPlaybackState(state);
audioSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
audioSession.setActive(true);
更具体一点: enter image description here
我对此感到疯狂。请帮忙。哈哈。 提前谢谢大家!
答案 0 :(得分:0)
尝试
或简单地覆盖Activity onKeyDown方法:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HEADSETHOOK){
//handle click
return true;
}
return super.onKeyDown(keyCode, event);
}