diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index e7a306b78028b..ed6d87e423f43 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -1755,6 +1755,26 @@ public class AudioManager { } } + /** + * @hide + * Returns the current remote control client. + * @param rcClientId the counter value that matches the extra + * {@link AudioManager#EXTRA_REMOTE_CONTROL_CLIENT} in the + * {@link AudioManager#REMOTE_CONTROL_CLIENT_CHANGED} event + * @return the current IRemoteControlClient from which information to display on the remote + * control can be retrieved, or null if rcClientId doesn't match the current generation + * counter. + */ + public IRemoteControlClient getRemoteControlClient(int rcClientId) { + IAudioService service = getService(); + try { + return service.getRemoteControlClient(rcClientId); + } catch (RemoteException e) { + Log.e(TAG, "Dead object in getRemoteControlClient "+e); + return null; + } + } + /** * @hide * Definitions of constants to be used in {@link android.media.IRemoteControlClient}. diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index bf1585dceed30..cb56bc6a68cf6 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -2845,20 +2845,20 @@ public class AudioService extends IAudioService.Stub { } } - private final static Object mCurrentRcLock = new Object(); + private final Object mCurrentRcLock = new Object(); /** * The one remote control client to be polled for display information. * This object is never null, but its reference might. * Access protected by mCurrentRcLock. */ - private static SoftReference mCurrentRcClientRef = + private SoftReference mCurrentRcClientRef = new SoftReference(null); /** * A monotonically increasing generation counter for mCurrentRcClientRef. * Only accessed with a lock on mCurrentRcLock. */ - private static int mCurrentRcClientGen = 0; + private int mCurrentRcClientGen = 0; /** * Returns the current remote control client. @@ -2869,7 +2869,7 @@ public class AudioService extends IAudioService.Stub { * control can be retrieved, or null if rcClientId doesn't match the current generation * counter. */ - public static IRemoteControlClient getRemoteControlClient(int rcClientId) { + public IRemoteControlClient getRemoteControlClient(int rcClientId) { synchronized(mCurrentRcLock) { if (rcClientId == mCurrentRcClientGen) { return mCurrentRcClientRef.get(); diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index 9afe55326e68a..25b9a1b352347 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -93,6 +93,8 @@ interface IAudioService { void registerRemoteControlClient(in ComponentName eventReceiver, in IRemoteControlClient rcClient, in String callingPackageName); + IRemoteControlClient getRemoteControlClient(in int rcClientId); + void notifyRemoteControlInformationChanged(in ComponentName eventReceiver); void startBluetoothSco(IBinder cb);