| /* |
| * 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 android.annotation.RequiresPermission; |
| import android.annotation.SuppressLint; |
| 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"; |
| |
| /** |
| * 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 |
| public void onServiceConnected(IBinder service) {} |
| |
| /** @hide */ |
| @Override |
| public void onServiceDisconnected() {} |
| |
| /** @hide */ |
| @Override |
| 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(android.Manifest.permission.BLUETOOTH_CONNECT) |
| @SuppressLint("AndroidFrameworkRequiresPermission") |
| 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(android.Manifest.permission.BLUETOOTH_CONNECT) |
| @SuppressLint("AndroidFrameworkRequiresPermission") |
| 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(android.Manifest.permission.BLUETOOTH_CONNECT) |
| @SuppressLint("AndroidFrameworkRequiresPermission") |
| 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(android.Manifest.permission.BLUETOOTH_CONNECT) |
| @SuppressLint("AndroidFrameworkRequiresPermission") |
| 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(android.Manifest.permission.BLUETOOTH_CONNECT) |
| @SuppressLint("AndroidFrameworkRequiresPermission") |
| 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(android.Manifest.permission.BLUETOOTH_CONNECT) |
| @SuppressLint("AndroidFrameworkRequiresPermission") |
| 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(android.Manifest.permission.BLUETOOTH_CONNECT) |
| @SuppressLint("AndroidFrameworkRequiresPermission") |
| 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(android.Manifest.permission.BLUETOOTH_CONNECT) |
| @SuppressLint("AndroidFrameworkRequiresPermission") |
| 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; |
| } |