Я разрабатываю своеобразное легкое приложение в 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>
Дело в том, что, когда я запустить приложение, и я нажимаю медиа-кнопка в наушниках, ничего не происходит с MediaPlayer для Android (как это обычно бывает), и это указывает на то, что на самом деле приложение имеет приоритет для этих кнопок над медиаплеер Android. Однако в приложении ничего не происходит ни с прессами (когда это должно произойти что-то). Мне тоже нужно добавить, что, когда пресса длинна, открывается открытое приложение Google. Тем не менее, меня не интересуют длинные прессы.
Кроме того, я должен отметить, что, откуда я почерпнул это, там было больше кода помимо уже видели, например, были такие вещи, как:
//AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//ComponentName mReceiverComponent = new ComponentName(this, MediaButtonIntentReceiver.class);
//mAudioManager.registerMediaButtonEventReceiver(mReceiverComponent);
// mAudioManager.unregisterMediaButtonEventReceiver(mReceiverComponent);
(эти линии были отброшены мной) Во всяком случае этот код не работал, потому что Android-студия говорит, что они устарели.
Я также нашел:
// BroadcastReceiver MediaButtonIntentReceiver = новый MediaButtonIntentReceiver(); // MediaButtonIntentReceiver mMediaButtonReceiver = new MediaButtonIntentReceiver(); // IntentFilter mediaFilter = новый IntentFilter (Intent.ACTION_MEDIA_BUTTON); //mediaFilter.setPriority (1000000000); // registerReceiver (mMediaButtonReceiver, mediaFilter);
Я положил его в onCreate of MainActivity. И не получилось.
Я нашел последний код в другом вопросе этого форума. Коды не работают, так как некоторые части кода отображаются красным цветом (обратный вызов, возврат истины (и появляется «возврат внешнего метода») ...
MediaSession audioSession = новый MediaSession (getApplicationContext(), "ТЕГ"); audioSession.setCallback (новый 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
я получаю с ума это. Пожалуйста помоги. ха-ха. Спасибо всем заранее!
Что вы пробовали до сих пор? Вы только пытаетесь прослушивать нажатия кнопок, когда ваша деятельность находится на переднем плане или когда ваше приложение также находится в фоновом режиме? – ianhanniballake
Check: http://stackoverflow.com/questions/9056814/how-do-intercess-button-presses-on-the-headset-in-android – user2025187
Спасибо, что ответили. Я уже пробовал коды, показанные там. Дело в том, что они не работают, потому что я все еще так новичок, и я не знаю, как справляться с некоторыми проблемами, возникающими при копировании этих кодов или из-за проблем с версиями Android. Поэтому в основном то, что мне кажется, что я должен сделать, - объявить новый класс, который простирается от Broadcastreceiver, затем установить его приоритет максимум в манифесте, а затем вызвать его из mainActivity .. не так ли? Как я могу назвать это из mainActivity? (да простите мое невежество) и что такое MediaSession, AudioManager ..? – BlueMath