• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.IntDef;
22 import android.annotation.RequiresPermission;
23 import android.annotation.SystemApi;
24 import android.annotation.UnsupportedAppUsage;
25 import android.os.Build;
26 
27 import java.lang.annotation.Retention;
28 import java.lang.annotation.RetentionPolicy;
29 import java.util.List;
30 
31 /**
32  * Public APIs for the Bluetooth Profiles.
33  *
34  * <p> Clients should call {@link BluetoothAdapter#getProfileProxy},
35  * to get the Profile Proxy. Each public profile implements this
36  * interface.
37  */
38 public interface BluetoothProfile {
39 
40     /**
41      * Extra for the connection state intents of the individual profiles.
42      *
43      * This extra represents the current connection state of the profile of the
44      * Bluetooth device.
45      */
46     String EXTRA_STATE = "android.bluetooth.profile.extra.STATE";
47 
48     /**
49      * Extra for the connection state intents of the individual profiles.
50      *
51      * This extra represents the previous connection state of the profile of the
52      * Bluetooth device.
53      */
54     String EXTRA_PREVIOUS_STATE =
55             "android.bluetooth.profile.extra.PREVIOUS_STATE";
56 
57     /** The profile is in disconnected state */
58     int STATE_DISCONNECTED = 0;
59     /** The profile is in connecting state */
60     int STATE_CONNECTING = 1;
61     /** The profile is in connected state */
62     int STATE_CONNECTED = 2;
63     /** The profile is in disconnecting state */
64     int STATE_DISCONNECTING = 3;
65 
66     /** @hide */
67     @IntDef({
68             STATE_DISCONNECTED,
69             STATE_CONNECTING,
70             STATE_CONNECTED,
71             STATE_DISCONNECTING,
72     })
73     @Retention(RetentionPolicy.SOURCE)
74     public @interface BtProfileState {}
75 
76     /**
77      * Headset and Handsfree profile
78      */
79     int HEADSET = 1;
80 
81     /**
82      * A2DP profile.
83      */
84     int A2DP = 2;
85 
86     /**
87      * Health Profile
88      *
89      * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New
90      * apps should use Bluetooth Low Energy based solutions such as {@link BluetoothGatt},
91      * {@link BluetoothAdapter#listenUsingL2capChannel()}, or
92      * {@link BluetoothDevice#createL2capChannel(int)}
93      */
94     @Deprecated
95     int HEALTH = 3;
96 
97     /**
98      * HID Host
99      *
100      * @hide
101      */
102     int HID_HOST = 4;
103 
104     /**
105      * PAN Profile
106      *
107      * @hide
108      */
109     @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
110     int PAN = 5;
111 
112     /**
113      * PBAP
114      *
115      * @hide
116      */
117     int PBAP = 6;
118 
119     /**
120      * GATT
121      */
122     int GATT = 7;
123 
124     /**
125      * GATT_SERVER
126      */
127     int GATT_SERVER = 8;
128 
129     /**
130      * MAP Profile
131      *
132      * @hide
133      */
134     int MAP = 9;
135 
136     /*
137      * SAP Profile
138      * @hide
139      */
140     int SAP = 10;
141 
142     /**
143      * A2DP Sink Profile
144      *
145      * @hide
146      */
147     @UnsupportedAppUsage
148     int A2DP_SINK = 11;
149 
150     /**
151      * AVRCP Controller Profile
152      *
153      * @hide
154      */
155     @UnsupportedAppUsage
156     int AVRCP_CONTROLLER = 12;
157 
158     /**
159      * AVRCP Target Profile
160      *
161      * @hide
162      */
163     int AVRCP = 13;
164 
165     /**
166      * Headset Client - HFP HF Role
167      *
168      * @hide
169      */
170     int HEADSET_CLIENT = 16;
171 
172     /**
173      * PBAP Client
174      *
175      * @hide
176      */
177     int PBAP_CLIENT = 17;
178 
179     /**
180      * MAP Messaging Client Equipment (MCE)
181      *
182      * @hide
183      */
184     int MAP_CLIENT = 18;
185 
186     /**
187      * HID Device
188      */
189     int HID_DEVICE = 19;
190 
191     /**
192      * Object Push Profile (OPP)
193      *
194      * @hide
195      */
196     int OPP = 20;
197 
198     /**
199      * Hearing Aid Device
200      *
201      */
202     int HEARING_AID = 21;
203 
204     /**
205      * Max profile ID. This value should be updated whenever a new profile is added to match
206      * the largest value assigned to a profile.
207      *
208      * @hide
209      */
210     int MAX_PROFILE_ID = 21;
211 
212     /**
213      * Default priority for devices that we try to auto-connect to and
214      * and allow incoming connections for the profile
215      *
216      * @hide
217      **/
218     @UnsupportedAppUsage
219     int PRIORITY_AUTO_CONNECT = 1000;
220 
221     /**
222      * Default priority for devices that allow incoming
223      * and outgoing connections for the profile
224      *
225      * @hide
226      **/
227     @SystemApi
228     int PRIORITY_ON = 100;
229 
230     /**
231      * Default priority for devices that does not allow incoming
232      * connections and outgoing connections for the profile.
233      *
234      * @hide
235      **/
236     @SystemApi
237     int PRIORITY_OFF = 0;
238 
239     /**
240      * Default priority when not set or when the device is unpaired
241      *
242      * @hide
243      */
244     @UnsupportedAppUsage
245     int PRIORITY_UNDEFINED = -1;
246 
247     /**
248      * Get connected devices for this specific profile.
249      *
250      * <p> Return the set of devices which are in state {@link #STATE_CONNECTED}
251      *
252      * @return List of devices. The list will be empty on error.
253      */
254     @RequiresPermission(Manifest.permission.BLUETOOTH)
getConnectedDevices()255     public List<BluetoothDevice> getConnectedDevices();
256 
257     /**
258      * Get a list of devices that match any of the given connection
259      * states.
260      *
261      * <p> If none of the devices match any of the given states,
262      * an empty list will be returned.
263      *
264      * @param states Array of states. States can be one of {@link #STATE_CONNECTED}, {@link
265      * #STATE_CONNECTING}, {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING},
266      * @return List of devices. The list will be empty on error.
267      */
268     @RequiresPermission(Manifest.permission.BLUETOOTH)
getDevicesMatchingConnectionStates(int[] states)269     public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states);
270 
271     /**
272      * Get the current connection state of the profile
273      *
274      * @param device Remote bluetooth device.
275      * @return State of the profile connection. One of {@link #STATE_CONNECTED}, {@link
276      * #STATE_CONNECTING}, {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING}
277      */
278     @RequiresPermission(Manifest.permission.BLUETOOTH)
getConnectionState(BluetoothDevice device)279     @BtProfileState int getConnectionState(BluetoothDevice device);
280 
281     /**
282      * An interface for notifying BluetoothProfile IPC clients when they have
283      * been connected or disconnected to the service.
284      */
285     public interface ServiceListener {
286         /**
287          * Called to notify the client when the proxy object has been
288          * connected to the service.
289          *
290          * @param profile - One of {@link #HEADSET} or {@link #A2DP}
291          * @param proxy - One of {@link BluetoothHeadset} or {@link BluetoothA2dp}
292          */
onServiceConnected(int profile, BluetoothProfile proxy)293         public void onServiceConnected(int profile, BluetoothProfile proxy);
294 
295         /**
296          * Called to notify the client that this proxy object has been
297          * disconnected from the service.
298          *
299          * @param profile - One of {@link #HEADSET} or {@link #A2DP}
300          */
onServiceDisconnected(int profile)301         public void onServiceDisconnected(int profile);
302     }
303 
304     /**
305      * Convert an integer value of connection state into human readable string
306      *
307      * @param connectionState - One of {@link #STATE_DISCONNECTED}, {@link #STATE_CONNECTING},
308      * {@link #STATE_CONNECTED}, or {@link #STATE_DISCONNECTED}
309      * @return a string representation of the connection state, STATE_UNKNOWN if the state
310      * is not defined
311      * @hide
312      */
getConnectionStateName(int connectionState)313     static String getConnectionStateName(int connectionState) {
314         switch (connectionState) {
315             case STATE_DISCONNECTED:
316                 return "STATE_DISCONNECTED";
317             case STATE_CONNECTING:
318                 return "STATE_CONNECTING";
319             case STATE_CONNECTED:
320                 return "STATE_CONNECTED";
321             case STATE_DISCONNECTING:
322                 return "STATE_DISCONNECTING";
323             default:
324                 return "STATE_UNKNOWN";
325         }
326     }
327 }
328