public static boolean dispatchMediaButtonEvent(Object controllerObj, KeyEvent event) { return ((MediaController)controllerObj).dispatchMediaButtonEvent(event); }
@TargetApi(Build.VERSION_CODES.LOLLIPOP) void sendHeadsetHookLollipop() { MediaSessionManager mediaSessionManager = (MediaSessionManager) getApplicationContext().getSystemService(Context.MEDIA_SESSION_SERVICE); try { List<MediaController> mediaControllerList = mediaSessionManager.getActiveSessions (new ComponentName(getApplicationContext(), NotificationReceiverService.class)); for (MediaController m : mediaControllerList) { if ("com.android.server.telecom".equals(m.getPackageName())) { m.dispatchMediaButtonEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); log.info("HEADSETHOOK sent to telecom server"); break; } } } catch (SecurityException e) { log.error("Permission error. Access to notification not granted to the app."); } }
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) private boolean handleOnApi21(@ValidData @NonNull MediaControlOperationData data) { int keyCode = toKeyCode(data.choice); KeyEvent keyEvent_down = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode); KeyEvent keyEvent_up = new KeyEvent(KeyEvent.ACTION_UP, keyCode); ComponentName myNotificationListenerComponent = new ComponentName(context, MediaControlHelperNotificationListenerService.class); MediaSessionManager mediaSessionManager = ((MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE)); if (mediaSessionManager == null) { Logger.e("MediaSessionManager is null."); return false; } List<MediaController> activeSessions = mediaSessionManager.getActiveSessions(myNotificationListenerComponent); if (activeSessions.size() > 0) { MediaController mediaController = activeSessions.get(0); mediaController.dispatchMediaButtonEvent(keyEvent_down); mediaController.dispatchMediaButtonEvent(keyEvent_up); } return true; }