BluetoothA2dp.java revision b24e11baac589fe16426f2d243b460ab84991c7b
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.bluetooth; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.SdkConstant; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.SdkConstant.SdkConstantType; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.server.BluetoothA2dpService; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.ServiceManager; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pellyimport java.util.Arrays; 29bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pellyimport java.util.Collections; 30bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pellyimport java.util.Set; 31bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pellyimport java.util.HashSet; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Public API for controlling the Bluetooth A2DP Profile Service. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * BluetoothA2dp is a proxy object for controlling the Bluetooth A2DP 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Service via IPC. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creating a BluetoothA2dp object will initiate a binding with the 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * BluetoothHeadset service. Users of this object should call close() when they 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are finished, so that this proxy object can unbind from the service. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Currently the BluetoothA2dp service runs in the system server and this 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * proxy object will be immediately bound to the service on construction. 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Currently this class provides methods to connect to A2DP audio sinks. 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 50bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pellypublic final class BluetoothA2dp { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "BluetoothA2dp"; 52f5b4b98fada53d91c4c2ebeb5a1d33ccc95c94d2The Android Open Source Project private static final boolean DBG = false; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** int extra for SINK_STATE_CHANGED_ACTION */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String SINK_STATE = 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android.bluetooth.a2dp.intent.SINK_STATE"; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** int extra for SINK_STATE_CHANGED_ACTION */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String SINK_PREVIOUS_STATE = 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android.bluetooth.a2dp.intent.SINK_PREVIOUS_STATE"; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Indicates the state of an A2DP audio sink has changed. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This intent will always contain SINK_STATE, SINK_PREVIOUS_STATE and 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * BluetoothIntent.ADDRESS extras. 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String SINK_STATE_CHANGED_ACTION = 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android.bluetooth.a2dp.intent.action.SINK_STATE_CHANGED"; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATE_DISCONNECTED = 0; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATE_CONNECTING = 1; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATE_CONNECTED = 2; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATE_DISCONNECTING = 3; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Playing implies connected */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATE_PLAYING = 4; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Default priority for a2dp devices that should allow incoming 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * connections */ 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PRIORITY_AUTO = 100; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Default priority for a2dp devices that should not allow incoming 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * connections */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PRIORITY_OFF = 0; 82bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final IBluetoothA2dp mService; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Context mContext; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a BluetoothA2dp proxy object for interacting with the local 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bluetooth A2DP service. 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c Context 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BluetoothA2dp(Context c) { 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext = c; 93bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IBinder b = ServiceManager.getService(BluetoothA2dpService.BLUETOOTH_A2DP_SERVICE); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (b == null) { 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException("Bluetooth A2DP service not available!"); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = IBluetoothA2dp.Stub.asInterface(b); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Initiate a connection to an A2DP sink. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Listen for SINK_STATE_CHANGED_ACTION to find out when the 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * connection is completed. 104bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly * @param device Remote BT device. 105b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly * @return false on immediate error, true otherwise 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 108b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly public boolean connectSink(BluetoothDevice device) { 109bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly if (DBG) log("connectSink(" + device + ")"); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 111bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly return mService.connectSink(device); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 113b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly Log.e(TAG, "", e); 114b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly return false; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Initiate disconnect from an A2DP sink. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Listen for SINK_STATE_CHANGED_ACTION to find out when 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * disconnect is completed. 121bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly * @param device Remote BT device. 122b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly * @return false on immediate error, true otherwise 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 125b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly public boolean disconnectSink(BluetoothDevice device) { 126bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly if (DBG) log("disconnectSink(" + device + ")"); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 128bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly return mService.disconnectSink(device); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 130b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly Log.e(TAG, "", e); 131b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly return false; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Check if a specified A2DP sink is connected. 136bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly * @param device Remote BT device. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if connected (or playing), false otherwise and on error. 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 140bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly public boolean isSinkConnected(BluetoothDevice device) { 141bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly if (DBG) log("isSinkConnected(" + device + ")"); 142bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly int state = getSinkState(device); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return state == STATE_CONNECTED || state == STATE_PLAYING; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Check if any A2DP sink is connected. 147bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly * @return a unmodifiable set of connected A2DP sinks, or null on error. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 150bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly public Set<BluetoothDevice> getConnectedSinks() { 151bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly if (DBG) log("getConnectedSinks()"); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 153bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly return Collections.unmodifiableSet( 154bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly new HashSet<BluetoothDevice>(Arrays.asList(mService.getConnectedSinks()))); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 156b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly Log.e(TAG, "", e); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Get the state of an A2DP sink 162bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly * @param device Remote BT device. 163b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly * @return State code, one of STATE_ 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 166bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly public int getSinkState(BluetoothDevice device) { 167bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly if (DBG) log("getSinkState(" + device + ")"); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 169bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly return mService.getSinkState(device); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 171b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly Log.e(TAG, "", e); 172b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly return BluetoothA2dp.STATE_DISCONNECTED; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set priority of a2dp sink. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Priority is a non-negative integer. By default paired sinks will have 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a priority of PRIORITY_AUTO, and unpaired headset PRIORITY_NONE (0). 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sinks with priority greater than zero will accept incoming connections 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (if no sink is currently connected). 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Priority for unpaired sink must be PRIORITY_NONE. 183bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly * @param device Paired sink 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param priority Integer priority, for example PRIORITY_AUTO or 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PRIORITY_NONE 186b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly * @return true if priority is set, false on error 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 188b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly public boolean setSinkPriority(BluetoothDevice device, int priority) { 189bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly if (DBG) log("setSinkPriority(" + device + ", " + priority + ")"); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 191bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly return mService.setSinkPriority(device, priority); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 193b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly Log.e(TAG, "", e); 194b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly return false; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get priority of a2dp sink. 200bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly * @param device Sink 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return non-negative priority, or negative error code on error. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 203bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly public int getSinkPriority(BluetoothDevice device) { 204bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly if (DBG) log("getSinkPriority(" + device + ")"); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 206bd022f423a33f0794bb53e5b0720da2d67e4631cNick Pelly return mService.getSinkPriority(device); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 208b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly Log.e(TAG, "", e); 209b24e11baac589fe16426f2d243b460ab84991c7bNick Pelly return PRIORITY_OFF; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Helper for converting a state to a string. 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For debug use only - strings are not internationalized. 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static String stateToString(int state) { 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (state) { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case STATE_DISCONNECTED: 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "disconnected"; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case STATE_CONNECTING: 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "connecting"; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case STATE_CONNECTED: 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "connected"; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case STATE_DISCONNECTING: 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "disconnecting"; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case STATE_PLAYING: 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "playing"; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "<unknown state " + state + ">"; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 233f5b4b98fada53d91c4c2ebeb5a1d33ccc95c94d2The Android Open Source Project 234f5b4b98fada53d91c4c2ebeb5a1d33ccc95c94d2The Android Open Source Project private static void log(String msg) { 235f5b4b98fada53d91c4c2ebeb5a1d33ccc95c94d2The Android Open Source Project Log.d(TAG, msg); 236f5b4b98fada53d91c4c2ebeb5a1d33ccc95c94d2The Android Open Source Project } 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 238