1 /* 2 * Copyright (C) 2010-2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 18 package android.bluetooth; 19 20 import android.Manifest; 21 import android.annotation.RequiresPermission; 22 23 import java.util.List; 24 25 /** 26 * Public APIs for the Bluetooth Profiles. 27 * 28 * <p> Clients should call {@link BluetoothAdapter#getProfileProxy}, 29 * to get the Profile Proxy. Each public profile implements this 30 * interface. 31 */ 32 public interface BluetoothProfile { 33 34 /** 35 * Extra for the connection state intents of the individual profiles. 36 * 37 * This extra represents the current connection state of the profile of the 38 * Bluetooth device. 39 */ 40 public static final String EXTRA_STATE = "android.bluetooth.profile.extra.STATE"; 41 42 /** 43 * Extra for the connection state intents of the individual profiles. 44 * 45 * This extra represents the previous connection state of the profile of the 46 * Bluetooth device. 47 */ 48 public static final String EXTRA_PREVIOUS_STATE = 49 "android.bluetooth.profile.extra.PREVIOUS_STATE"; 50 51 /** The profile is in disconnected state */ 52 public static final int STATE_DISCONNECTED = 0; 53 /** The profile is in connecting state */ 54 public static final int STATE_CONNECTING = 1; 55 /** The profile is in connected state */ 56 public static final int STATE_CONNECTED = 2; 57 /** The profile is in disconnecting state */ 58 public static final int STATE_DISCONNECTING = 3; 59 60 /** 61 * Headset and Handsfree profile 62 */ 63 public static final int HEADSET = 1; 64 65 /** 66 * A2DP profile. 67 */ 68 public static final int A2DP = 2; 69 70 /** 71 * Health Profile 72 */ 73 public static final int HEALTH = 3; 74 75 /** 76 * Input Device Profile 77 * @hide 78 */ 79 public static final int INPUT_DEVICE = 4; 80 81 /** 82 * PAN Profile 83 * @hide 84 */ 85 public static final int PAN = 5; 86 87 /** 88 * PBAP 89 * @hide 90 */ 91 public static final int PBAP = 6; 92 93 /** 94 * GATT 95 */ 96 static public final int GATT = 7; 97 98 /** 99 * GATT_SERVER 100 */ 101 static public final int GATT_SERVER = 8; 102 103 /** 104 * MAP Profile 105 * @hide 106 */ 107 public static final int MAP = 9; 108 109 /* 110 * SAP Profile 111 * @hide 112 */ 113 public static final int SAP = 10; 114 115 /** 116 * A2DP Sink Profile 117 * @hide 118 */ 119 public static final int A2DP_SINK = 11; 120 121 /** 122 * AVRCP Controller Profile 123 * @hide 124 */ 125 public static final int AVRCP_CONTROLLER = 12; 126 127 /** 128 * Headset Client - HFP HF Role 129 * @hide 130 */ 131 public static final int HEADSET_CLIENT = 16; 132 133 /** 134 * PBAP Client 135 * @hide 136 */ 137 public static final int PBAP_CLIENT = 17; 138 139 /** 140 * MAP Messaging Client Equipment (MCE) 141 * @hide 142 */ 143 public static final int MAP_CLIENT = 18; 144 145 /** 146 * Input Host 147 * @hide 148 */ 149 static public final int INPUT_HOST = 19; 150 151 /** 152 * Max profile ID. This value should be updated whenever a new profile is added to match 153 * the largest value assigned to a profile. 154 * @hide 155 */ 156 public static final int MAX_PROFILE_ID = 19; 157 158 /** 159 * Default priority for devices that we try to auto-connect to and 160 * and allow incoming connections for the profile 161 * @hide 162 **/ 163 public static final int PRIORITY_AUTO_CONNECT = 1000; 164 165 /** 166 * Default priority for devices that allow incoming 167 * and outgoing connections for the profile 168 * @hide 169 **/ 170 public static final int PRIORITY_ON = 100; 171 172 /** 173 * Default priority for devices that does not allow incoming 174 * connections and outgoing connections for the profile. 175 * @hide 176 **/ 177 public static final int PRIORITY_OFF = 0; 178 179 /** 180 * Default priority when not set or when the device is unpaired 181 * @hide 182 * */ 183 public static final int PRIORITY_UNDEFINED = -1; 184 185 /** 186 * Get connected devices for this specific profile. 187 * 188 * <p> Return the set of devices which are in state {@link #STATE_CONNECTED} 189 * 190 * @return List of devices. The list will be empty on error. 191 */ 192 @RequiresPermission(Manifest.permission.BLUETOOTH) getConnectedDevices()193 public List<BluetoothDevice> getConnectedDevices(); 194 195 /** 196 * Get a list of devices that match any of the given connection 197 * states. 198 * 199 * <p> If none of the devices match any of the given states, 200 * an empty list will be returned. 201 * 202 * @param states Array of states. States can be one of 203 * {@link #STATE_CONNECTED}, {@link #STATE_CONNECTING}, 204 * {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING}, 205 * @return List of devices. The list will be empty on error. 206 */ 207 @RequiresPermission(Manifest.permission.BLUETOOTH) getDevicesMatchingConnectionStates(int[] states)208 public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states); 209 210 /** 211 * Get the current connection state of the profile 212 * 213 * @param device Remote bluetooth device. 214 * @return State of the profile connection. One of 215 * {@link #STATE_CONNECTED}, {@link #STATE_CONNECTING}, 216 * {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING} 217 */ 218 @RequiresPermission(Manifest.permission.BLUETOOTH) getConnectionState(BluetoothDevice device)219 public int getConnectionState(BluetoothDevice device); 220 221 /** 222 * An interface for notifying BluetoothProfile IPC clients when they have 223 * been connected or disconnected to the service. 224 */ 225 public interface ServiceListener { 226 /** 227 * Called to notify the client when the proxy object has been 228 * connected to the service. 229 * @param profile - One of {@link #HEALTH}, {@link #HEADSET} or 230 * {@link #A2DP} 231 * @param proxy - One of {@link BluetoothHealth}, {@link BluetoothHeadset} or 232 * {@link BluetoothA2dp} 233 */ onServiceConnected(int profile, BluetoothProfile proxy)234 public void onServiceConnected(int profile, BluetoothProfile proxy); 235 236 /** 237 * Called to notify the client that this proxy object has been 238 * disconnected from the service. 239 * @param profile - One of {@link #HEALTH}, {@link #HEADSET} or 240 * {@link #A2DP} 241 */ onServiceDisconnected(int profile)242 public void onServiceDisconnected(int profile); 243 } 244 } 245