| /* | |
| * Copyright (C) 2011 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package android.bluetooth; | |
| import static android.Manifest.permission.BLUETOOTH_CONNECT; | |
| import android.annotation.Hide; | |
| import android.annotation.RequiresNoPermission; | |
| import android.annotation.RequiresPermission; | |
| import android.bluetooth.annotations.RequiresBluetoothConnectPermission; | |
| import android.bluetooth.annotations.RequiresLegacyBluetoothPermission; | |
| import android.os.IBinder; | |
| import android.os.ParcelFileDescriptor; | |
| import android.util.Log; | |
| import java.util.Collections; | |
| import java.util.List; | |
| /** | |
| * Public API for Bluetooth Health Profile. | |
| * | |
| * <p>BluetoothHealth is a proxy object for controlling the Bluetooth Service via IPC. | |
| * | |
| * <p>How to connect to a health device which is acting in the source role. | |
| * <li>Use {@link BluetoothAdapter#getProfileProxy} to get the BluetoothHealth proxy object. | |
| * <li>Create an {@link BluetoothHealth} callback and call {@link #registerSinkAppConfiguration} to | |
| * register an application configuration | |
| * <li>Pair with the remote device. This currently needs to be done manually from Bluetooth Settings | |
| * <li>Connect to a health device using {@link #connectChannelToSource}. Some devices will connect | |
| * the channel automatically. The {@link BluetoothHealth} callback will inform the application | |
| * of channel state change. | |
| * <li>Use the file descriptor provided with a connected channel to read and write data to the | |
| * health channel. | |
| * <li>The received data needs to be interpreted using a health manager which implements the IEEE | |
| * 11073-xxxxx specifications. | |
| * <li>When done, close the health channel by calling {@link #disconnectChannel} and unregister the | |
| * application configuration calling {@link #unregisterAppConfiguration} | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should use | |
| * Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated | |
| public final class BluetoothHealth implements BluetoothProfile { | |
| private static final String TAG = BluetoothHealth.class.getSimpleName(); | |
| /** | |
| * Health Profile Source Role - the health device. | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int SOURCE_ROLE = 1 << 0; | |
| /** | |
| * Health Profile Sink Role the device talking to the health device. | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int SINK_ROLE = 1 << 1; | |
| /** | |
| * Health Profile - Channel Type used - Reliable | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int CHANNEL_TYPE_RELIABLE = 10; | |
| /** | |
| * Health Profile - Channel Type used - Streaming | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int CHANNEL_TYPE_STREAMING = 11; | |
| /** Hide auto-created default constructor */ | |
| @Hide | |
| BluetoothHealth() {} | |
| @Hide | |
| @Override | |
| @RequiresNoPermission | |
| public void onServiceConnected(IBinder service) {} | |
| @Hide | |
| @Override | |
| @RequiresNoPermission | |
| public void onServiceDisconnected() {} | |
| @Hide | |
| @Override | |
| @RequiresNoPermission | |
| public BluetoothAdapter getAdapter() { | |
| return null; | |
| } | |
| /** | |
| * Register an application configuration that acts as a Health SINK. This is the configuration | |
| * that will be used to communicate with health devices which will act as the {@link | |
| * #SOURCE_ROLE}. This is an asynchronous call and so the callback is used to notify success or | |
| * failure if the function returns true. | |
| * | |
| * @param name The friendly name associated with the application or configuration. | |
| * @param dataType The dataType of the Source role of Health Profile to which the sink wants to | |
| * connect to. | |
| * @param callback A callback to indicate success or failure of the registration and all | |
| * operations done on this application configuration. | |
| * @return If true, callback will be called. | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated | |
| @RequiresLegacyBluetoothPermission | |
| @RequiresBluetoothConnectPermission | |
| @RequiresPermission(BLUETOOTH_CONNECT) | |
| public boolean registerSinkAppConfiguration( | |
| String name, int dataType, BluetoothHealthCallback callback) { | |
| Log.e(TAG, "registerSinkAppConfiguration(): BluetoothHealth is deprecated"); | |
| return false; | |
| } | |
| /** | |
| * Unregister an application configuration that has been registered using {@link | |
| * #registerSinkAppConfiguration} | |
| * | |
| * @param config The health app configuration | |
| * @return Success or failure. | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated | |
| @RequiresLegacyBluetoothPermission | |
| @RequiresBluetoothConnectPermission | |
| @RequiresPermission(BLUETOOTH_CONNECT) | |
| public boolean unregisterAppConfiguration(BluetoothHealthAppConfiguration config) { | |
| Log.e(TAG, "unregisterAppConfiguration(): BluetoothHealth is deprecated"); | |
| return false; | |
| } | |
| /** | |
| * Connect to a health device which has the {@link #SOURCE_ROLE}. This is an asynchronous call. | |
| * If this function returns true, the callback associated with the application configuration | |
| * will be called. | |
| * | |
| * @param device The remote Bluetooth device. | |
| * @param config The application configuration which has been registered using {@link | |
| * #registerSinkAppConfiguration(String, int, BluetoothHealthCallback) } | |
| * @return If true, the callback associated with the application config will be called. | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated | |
| @RequiresLegacyBluetoothPermission | |
| @RequiresBluetoothConnectPermission | |
| @RequiresPermission(BLUETOOTH_CONNECT) | |
| public boolean connectChannelToSource( | |
| BluetoothDevice device, BluetoothHealthAppConfiguration config) { | |
| Log.e(TAG, "connectChannelToSource(): BluetoothHealth is deprecated"); | |
| return false; | |
| } | |
| /** | |
| * Disconnect a connected health channel. This is an asynchronous call. If this function returns | |
| * true, the callback associated with the application configuration will be called. | |
| * | |
| * @param device The remote Bluetooth device. | |
| * @param config The application configuration which has been registered using {@link | |
| * #registerSinkAppConfiguration(String, int, BluetoothHealthCallback) } | |
| * @param channelId The channel id associated with the channel | |
| * @return If true, the callback associated with the application config will be called. | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated | |
| @RequiresLegacyBluetoothPermission | |
| @RequiresBluetoothConnectPermission | |
| @RequiresPermission(BLUETOOTH_CONNECT) | |
| public boolean disconnectChannel( | |
| BluetoothDevice device, BluetoothHealthAppConfiguration config, int channelId) { | |
| Log.e(TAG, "disconnectChannel(): BluetoothHealth is deprecated"); | |
| return false; | |
| } | |
| /** | |
| * Get the file descriptor of the main channel associated with the remote device and application | |
| * configuration. | |
| * | |
| * <p>It's the responsibility of the caller to close the ParcelFileDescriptor when done. | |
| * | |
| * @param device The remote Bluetooth health device | |
| * @param config The application configuration | |
| * @return null on failure, ParcelFileDescriptor on success. | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated | |
| @RequiresLegacyBluetoothPermission | |
| @RequiresBluetoothConnectPermission | |
| @RequiresPermission(BLUETOOTH_CONNECT) | |
| public ParcelFileDescriptor getMainChannelFd( | |
| BluetoothDevice device, BluetoothHealthAppConfiguration config) { | |
| Log.e(TAG, "getMainChannelFd(): BluetoothHealth is deprecated"); | |
| return null; | |
| } | |
| /** | |
| * Get the current connection state of the profile. | |
| * | |
| * <p>This is not specific to any application configuration but represents the connection state | |
| * of the local Bluetooth adapter with the remote device. This can be used by applications like | |
| * status bar which would just like to know the state of the local adapter. | |
| * | |
| * @param device Remote bluetooth device. | |
| * @return State of the profile connection. One of {@link #STATE_CONNECTED}, {@link | |
| * #STATE_CONNECTING}, {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING} | |
| */ | |
| @Override | |
| @RequiresLegacyBluetoothPermission | |
| @RequiresBluetoothConnectPermission | |
| @RequiresPermission(BLUETOOTH_CONNECT) | |
| public int getConnectionState(BluetoothDevice device) { | |
| Log.e(TAG, "getConnectionState(): BluetoothHealth is deprecated"); | |
| return STATE_DISCONNECTED; | |
| } | |
| /** | |
| * Get connected devices for the health profile. | |
| * | |
| * <p>Return the set of devices which are in state {@link #STATE_CONNECTED} | |
| * | |
| * <p>This is not specific to any application configuration but represents the connection state | |
| * of the local Bluetooth adapter for this profile. This can be used by applications like status | |
| * bar which would just like to know the state of the local adapter. | |
| * | |
| * @return List of devices. The list will be empty on error. | |
| */ | |
| @Override | |
| @RequiresLegacyBluetoothPermission | |
| @RequiresBluetoothConnectPermission | |
| @RequiresPermission(BLUETOOTH_CONNECT) | |
| public List<BluetoothDevice> getConnectedDevices() { | |
| Log.e(TAG, "getConnectedDevices(): BluetoothHealth is deprecated"); | |
| return Collections.emptyList(); | |
| } | |
| /** | |
| * Get a list of devices that match any of the given connection states. | |
| * | |
| * <p>If none of the devices match any of the given states, an empty list will be returned. | |
| * | |
| * <p>This is not specific to any application configuration but represents the connection state | |
| * of the local Bluetooth adapter for this profile. This can be used by applications like status | |
| * bar which would just like to know the state of the local adapter. | |
| * | |
| * @param states Array of states. States can be one of {@link #STATE_CONNECTED}, {@link | |
| * #STATE_CONNECTING}, {@link #STATE_DISCONNECTED}, {@link #STATE_DISCONNECTING}, | |
| * @return List of devices. The list will be empty on error. | |
| */ | |
| @Override | |
| @RequiresLegacyBluetoothPermission | |
| @RequiresBluetoothConnectPermission | |
| @RequiresPermission(BLUETOOTH_CONNECT) | |
| public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) { | |
| Log.e(TAG, "getDevicesMatchingConnectionStates(): BluetoothHealth is deprecated"); | |
| return Collections.emptyList(); | |
| } | |
| /** | |
| * Health Channel Connection State - Disconnected | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int STATE_CHANNEL_DISCONNECTED = 0; | |
| /** | |
| * Health Channel Connection State - Connecting | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int STATE_CHANNEL_CONNECTING = 1; | |
| /** | |
| * Health Channel Connection State - Connected | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int STATE_CHANNEL_CONNECTED = 2; | |
| /** | |
| * Health Channel Connection State - Disconnecting | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int STATE_CHANNEL_DISCONNECTING = 3; | |
| /** | |
| * Health App Configuration registration success | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int APP_CONFIG_REGISTRATION_SUCCESS = 0; | |
| /** | |
| * Health App Configuration registration failure | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int APP_CONFIG_REGISTRATION_FAILURE = 1; | |
| /** | |
| * Health App Configuration un-registration success | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int APP_CONFIG_UNREGISTRATION_SUCCESS = 2; | |
| /** | |
| * Health App Configuration un-registration failure | |
| * | |
| * @deprecated Health Device Profile (HDP) and MCAP protocol are no longer used. New apps should | |
| * use Bluetooth Low Energy based solutions such as {@link BluetoothGatt}, {@link | |
| * BluetoothAdapter#listenUsingL2capChannel()}, or {@link | |
| * BluetoothDevice#createL2capChannel(int)} | |
| */ | |
| @Deprecated public static final int APP_CONFIG_UNREGISTRATION_FAILURE = 3; | |
| } |