• 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.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