Вот мое усилие сделать рабочий код для обработки события кнопки гарнитуры лучшим способом. Я читал Android developer guide, но это явно неправильно, потому что они просят начать прослушивание регистрации имени класса.Android: Управление событиями кнопок гарнитуры и отправка информации в MainActivity
am.registerMediaButtonEventReceiver(RemoteControlReceiver); // Wrong
Поэтому я проверяю другие примеры, чтобы исправить код. Например, многие секретные предложения были опубликованы в this question, я также попробовал другой код, такой как this, и другое решение с MediaSession и очистки ненужных Я написал этот код:
я реализовал класс RemoteControlReceiver. Видимо, нет необходимости для статического внутреннего класса, на самом деле, см this comment:
public class RemoteControlReceiver extends BroadcastReceiver {
public RemoteControlReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "EVENT!!", Toast.LENGTH_SHORT).show();
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) {
Toast.makeText(context, "EVENT!!", Toast.LENGTH_SHORT).show();
}
}
}
}
Тогда я зарегистрировал намерение внутри MainActivity OnCreate() { ...
AudioManager am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
ComponentName mReceiverComponent = new ComponentName(this, RemoteControlReceiver.class);
am.registerMediaButtonEventReceiver(mReceiverComponent);
registerMediaButtonEventReceiver устарел, кстати, ...
Внутри манифеста я записываю фильтр, после тега активности:
<activity>
...
</activity>
<receiver android:name=".RemoteControlReceiver" android:enabled="true">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
Примечание: со статическим внутренним классом будет, например, «.MainActivity $ RemoteControlReceiver».
Я работаю на
compileSdkVersion 24
buildToolsVersion "24.0.0"
...
minSdkVersion 21
targetSdkVersion 24
Вот мои вопросы:
- Почему registerMediaButtonEventReceiver устарела? Кажется, что вся эта парадигма сейчас не так, но я не нашел информации о том, как справиться с этим классом проблем на портале разработчиков Android.
- В каком режиме я могу взаимодействовать с MainActivity? Моя цель - выполнить действие в MainActivity, когда была выполнена какая-либо операция с гарнитурой.
Ваш манифест говорит 'MainActivity $ MediaButtonReceiver', но ваш класс называется' RemoteControlReceiver'. Что он? – ianhanniballake
Благодарим вас @ianhanniballake за то, что вам нужно. Это была только типовая копия, но я реализовал множество приемников во время всех экспериментов. Теперь я исправил его, я подтвердил, что настройка такая же, как описано. – donnadulcinea