OSDN Git Service

Add API to check if a Bluetooth connection is encrypted (1/2)
authorAndre Eisenbach <eisenbach@google.com>
Fri, 6 Feb 2015 04:06:33 +0000 (20:06 -0800)
committerAndre Eisenbach <eisenbach@google.com>
Mon, 9 Feb 2015 19:31:06 +0000 (11:31 -0800)
Bug: 19186961
Change-Id: I24656a07ee23ebfe067a9dfb9c1bc4041c782d8c

api/system-current.txt
core/java/android/bluetooth/BluetoothDevice.java
core/java/android/bluetooth/IBluetooth.aidl

index d84b1dc..8d24e83 100644 (file)
@@ -6415,6 +6415,8 @@ package android.bluetooth {
     method public java.lang.String getName();
     method public int getType();
     method public android.os.ParcelUuid[] getUuids();
+    method public boolean isConnected();
+    method public boolean isEncrypted();
     method public boolean setPairingConfirmation(boolean);
     method public boolean setPin(byte[]);
     method public void writeToParcel(android.os.Parcel, int);
index 5e50b69..bb0d0a3 100644 (file)
@@ -18,6 +18,7 @@ package android.bluetooth;
 
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.SystemApi;
 import android.content.Context;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -67,6 +68,14 @@ public final class BluetoothDevice implements Parcelable {
     private static final boolean DBG = false;
 
     /**
+     * Connection state bitmask as returned by getConnectionState.
+     */
+    private static final int CONNECTION_STATE_DISCONNECTED = 0;
+    private static final int CONNECTION_STATE_CONNECTED = 1;
+    private static final int CONNECTION_STATE_ENCRYPTED_BREDR = 2;
+    private static final int CONNECTION_STATE_ENCRYPTED_LE = 4;
+
+    /**
      * Sentinel error value for this class. Guaranteed to not equal any other
      * integer constant in this class. Provided as a convenience for functions
      * that require a sentinel error value, for example:
@@ -940,13 +949,36 @@ public final class BluetoothDevice implements Parcelable {
      * @return True if there is at least one open connection to this device.
      * @hide
      */
+    @SystemApi
     public boolean isConnected() {
         if (sService == null) {
             // BT is not enabled, we cannot be connected.
             return false;
         }
         try {
-            return sService.isConnected(this);
+            return sService.getConnectionState(this) != CONNECTION_STATE_DISCONNECTED;
+        } catch (RemoteException e) {
+            Log.e(TAG, "", e);
+            return false;
+        }
+    }
+
+    /**
+     * Returns whether there is an open connection to this device
+     * that has been encrypted.
+     * <p>Requires {@link android.Manifest.permission#BLUETOOTH}.
+     *
+     * @return True if there is at least one encrypted connection to this device.
+     * @hide
+     */
+    @SystemApi
+    public boolean isEncrypted() {
+        if (sService == null) {
+            // BT is not enabled, we cannot be connected.
+            return false;
+        }
+        try {
+            return sService.getConnectionState(this) > CONNECTION_STATE_CONNECTED;
         } catch (RemoteException e) {
             Log.e(TAG, "", e);
             return false;
index cd4535a..dabb1ce 100644 (file)
@@ -59,7 +59,7 @@ interface IBluetooth
     boolean cancelBondProcess(in BluetoothDevice device);
     boolean removeBond(in BluetoothDevice device);
     int getBondState(in BluetoothDevice device);
-    boolean isConnected(in BluetoothDevice device);
+    int getConnectionState(in BluetoothDevice device);
 
     String getRemoteName(in BluetoothDevice device);
     int getRemoteType(in BluetoothDevice device);