package com.example.android.musicplayer; import android.content.ComponentName; import android.media.AudioManager; import android.util.Log; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Class that assists with handling new media button APIs available in API level 8. */ public class MediaButtonHelper { // Backwards compatibility code (methods available as of API Level 8) private static final String TAG = "MediaButtonHelper"; static { initializeStaticCompatMethods(); } static Method sMethodRegisterMediaButtonEventReceiver; static Method sMethodUnregisterMediaButtonEventReceiver; static void initializeStaticCompatMethods() { try { sMethodRegisterMediaButtonEventReceiver = AudioManager.class.getMethod( "registerMediaButtonEventReceiver", new Class[] { ComponentName.class }); sMethodUnregisterMediaButtonEventReceiver = AudioManager.class.getMethod( "unregisterMediaButtonEventReceiver", new Class[] { ComponentName.class }); } catch (NoSuchMethodException e) { // Silently fail when running on an OS before API level 8. } } public static void registerMediaButtonEventReceiverCompat(AudioManager audioManager, ComponentName receiver) { if (sMethodRegisterMediaButtonEventReceiver == null) return; try { sMethodRegisterMediaButtonEventReceiver.invoke(audioManager, receiver); } catch (InvocationTargetException e) { // Unpack original exception when possible Throwable cause = e.getCause(); if (cause instanceof RuntimeException) { throw (RuntimeException) cause; } else if (cause instanceof Error) { throw (Error) cause; } else { // Unexpected checked exception; wrap and re-throw throw new RuntimeException(e); } } catch (IllegalAccessException e) { Log.e(TAG, "IllegalAccessException invoking registerMediaButtonEventReceiver."); e.printStackTrace(); } } @SuppressWarnings("unused") public static void unregisterMediaButtonEventReceiverCompat(AudioManager audioManager, ComponentName receiver) { if (sMethodUnregisterMediaButtonEventReceiver == null) return; try { sMethodUnregisterMediaButtonEventReceiver.invoke(audioManager, receiver); } catch (InvocationTargetException e) { // Unpack original exception when possible Throwable cause = e.getCause(); if (cause instanceof RuntimeException) { throw (RuntimeException) cause; } else if (cause instanceof Error) { throw (Error) cause; } else { // Unexpected checked exception; wrap and re-throw throw new RuntimeException(e); } } catch (IllegalAccessException e) { Log.e(TAG, "IllegalAccessException invoking unregisterMediaButtonEventReceiver."); e.printStackTrace(); } } }