Мой проект почти закончен, оставил только один важный элемент. Это то, что я прошу прямо сейчас.Как перехватить нажатие кнопки гарнитуры в Android L?
Может ли кто-нибудь сказать мне, как прослушивать нажатие на гарнитуру/медиа-кнопки в Android L & выше? Я собираюсь попытаться использовать AM.registerReceiver, когда я понимаю, что он устарел, и я не вижу много документации/примеров в том, как использовать MediaSession (я пытаюсь использовать совместимость с моего minSDK - это API 16, есть ли любая разница?). Вот то, что я сейчас делаю (что приводит ни к чему):
void initReceivers() throws IllegalArgumentException {
final int RC = 1001;
if (!MainActivity.noisyRegistered) {
app.registerReceiver(noisyReceiver, new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY));
MainActivity.noisyRegistered = true;
Intent intent = new Intent(app, AudioReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(app, RC, intent, PendingIntent.FLAG_UPDATE_CURRENT);
ComponentName name = new ComponentName(app.getPackageName(), AudioReceiver.class.getName());
MediaSessionCompat mediaSession = new MediaSessionCompat(app, "sggTag", name, pending);
mediaSession.setMediaButtonReceiver(pending);
}
}
static public class AudioReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (!intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON))
return;
KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (event == null || binder == null || player == null)
return;
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_MEDIA_PLAY:
binder.resume();
break;
case KeyEvent.KEYCODE_MEDIA_PAUSE:
binder.resume();
break;
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
if (player.isPlaying())
binder.pause();
else
binder.resume();
break;
case KeyEvent.KEYCODE_MEDIA_NEXT:
binder.next();
break;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
binder.prev();
break;
}
}
}
Мой манифест:
<receiver android:name=".ListenService$AudioReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON"/>
</intent-filter>
</receiver>
Я на самом деле очень смущен, почему мне нужно предоставить для отложенного намерения, когда есть setCallback метод.
спасибо.
http://android-developers.blogspot.in/2010/06/allowing-applications-to-play-nicer.html Используйте следующую ссылку также –
Не может решить символ на 1000000000000000 в моем манифесте. –
Android Studio не может найти эту часть: Intents.ACTION_PLAYER_PAUSE –