FileDocCategorySizeDatePackage
BluetoothPbap.javaAPI DocAndroid 5.1 API11944Thu Mar 12 22:22:10 GMT 2015android.bluetooth

BluetoothPbap

public class BluetoothPbap extends Object
The Android Bluetooth API is not finalized, and *will* change. Use at your own risk. Public API for controlling the Bluetooth Pbap Service. This includes Bluetooth Phone book Access profile. BluetoothPbap is a proxy object for controlling the Bluetooth Pbap Service via IPC. Creating a BluetoothPbap object will create a binding with the BluetoothPbap service. Users of this object should call close() when they are finished with the BluetoothPbap, so that this proxy object can unbind from the service. This BluetoothPbap object is not immediately bound to the BluetoothPbap service. Use the ServiceListener interface to obtain a notification when it is bound, this is especially important if you wish to immediately call methods on BluetoothPbap after construction. Android only supports one connected Bluetooth Pce at a time.
hide

Fields Summary
private static final String
TAG
private static final boolean
DBG
private static final boolean
VDBG
public static final String
PBAP_STATE
int extra for PBAP_STATE_CHANGED_ACTION
public static final String
PBAP_PREVIOUS_STATE
int extra for PBAP_STATE_CHANGED_ACTION
public static final String
PBAP_STATE_CHANGED_ACTION
Indicates the state of a pbap connection state has changed. This intent will always contain PBAP_STATE, PBAP_PREVIOUS_STATE and BluetoothIntent.ADDRESS extras.
private IBluetoothPbap
mService
private final android.content.Context
mContext
private ServiceListener
mServiceListener
private BluetoothAdapter
mAdapter
public static final int
STATE_ERROR
There was an error trying to obtain the state
public static final int
STATE_DISCONNECTED
No client currently connected
public static final int
STATE_CONNECTING
Connection attempt in progress
public static final int
STATE_CONNECTED
Client is currently connected
public static final int
RESULT_FAILURE
public static final int
RESULT_SUCCESS
public static final int
RESULT_CANCELED
Connection canceled before completion.
private final IBluetoothStateChangeCallback
mBluetoothStateChangeCallback
private final android.content.ServiceConnection
mConnection
Constructors Summary
public BluetoothPbap(android.content.Context context, ServiceListener l)
Create a BluetoothPbap proxy object.


              
         
        mContext = context;
        mServiceListener = l;
        mAdapter = BluetoothAdapter.getDefaultAdapter();
        IBluetoothManager mgr = mAdapter.getBluetoothManager();
        if (mgr != null) {
            try {
                mgr.registerStateChangeCallback(mBluetoothStateChangeCallback);
            } catch (RemoteException e) {
                Log.e(TAG,"",e);
            }
        }
        doBind();
    
Methods Summary
public synchronized voidclose()
Close the connection to the backing service. Other public functions of BluetoothPbap will return default error results once close() has been called. Multiple invocations of close() are ok.

        IBluetoothManager mgr = mAdapter.getBluetoothManager();
        if (mgr != null) {
            try {
                mgr.unregisterStateChangeCallback(mBluetoothStateChangeCallback);
            } catch (Exception e) {
                Log.e(TAG,"",e);
            }
        }

        synchronized (mConnection) {
            if (mService != null) {
                try {
                    mService = null;
                    mContext.unbindService(mConnection);
                } catch (Exception re) {
                    Log.e(TAG,"",re);
                }
            }
        }
        mServiceListener = null;
    
public booleandisconnect()
Disconnects the current Pbap client (PCE). Currently this call blocks, it may soon be made asynchronous. Returns false if this proxy object is not currently connected to the Pbap service.

        if (DBG) log("disconnect()");
        if (mService != null) {
            try {
                mService.disconnect();
                return true;
            } catch (RemoteException e) {Log.e(TAG, e.toString());}
        } else {
            Log.w(TAG, "Proxy not attached to service");
            if (DBG) log(Log.getStackTraceString(new Throwable()));
        }
        return false;
    
booleandoBind()

        Intent intent = new Intent(IBluetoothPbap.class.getName());
        ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
        intent.setComponent(comp);
        if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,
                android.os.Process.myUserHandle())) {
            Log.e(TAG, "Could not bind to Bluetooth Pbap Service with " + intent);
            return false;
        }
        return true;
    
public static booleandoesClassMatchSink(BluetoothClass btClass)
Check class bits for possible PBAP support. This is a simple heuristic that tries to guess if a device with the given class bits might support PBAP. It is not accurate for all devices. It tries to err on the side of false positives.

return
True if this device might support PBAP.

        // TODO optimize the rule
        switch (btClass.getDeviceClass()) {
        case BluetoothClass.Device.COMPUTER_DESKTOP:
        case BluetoothClass.Device.COMPUTER_LAPTOP:
        case BluetoothClass.Device.COMPUTER_SERVER:
        case BluetoothClass.Device.COMPUTER_UNCATEGORIZED:
            return true;
        default:
            return false;
        }
    
protected voidfinalize()

        try {
            close();
        } finally {
            super.finalize();
        }
    
public BluetoothDevicegetClient()
Get the currently connected remote Bluetooth device (PCE).

return
The remote Bluetooth device, or null if not in connected or connecting state, or if this proxy object is not connected to the Pbap service.

        if (VDBG) log("getClient()");
        if (mService != null) {
            try {
                return mService.getClient();
            } catch (RemoteException e) {Log.e(TAG, e.toString());}
        } else {
            Log.w(TAG, "Proxy not attached to service");
            if (DBG) log(Log.getStackTraceString(new Throwable()));
        }
        return null;
    
public intgetState()
Get the current state of the BluetoothPbap service.

return
One of the STATE_ return codes, or STATE_ERROR if this proxy object is currently not connected to the Pbap service.

        if (VDBG) log("getState()");
        if (mService != null) {
            try {
                return mService.getState();
            } catch (RemoteException e) {Log.e(TAG, e.toString());}
        } else {
            Log.w(TAG, "Proxy not attached to service");
            if (DBG) log(Log.getStackTraceString(new Throwable()));
        }
        return BluetoothPbap.STATE_ERROR;
    
public booleanisConnected(BluetoothDevice device)
Returns true if the specified Bluetooth device is connected (does not include connecting). Returns false if not connected, or if this proxy object is not currently connected to the Pbap service.

        if (VDBG) log("isConnected(" + device + ")");
        if (mService != null) {
            try {
                return mService.isConnected(device);
            } catch (RemoteException e) {Log.e(TAG, e.toString());}
        } else {
            Log.w(TAG, "Proxy not attached to service");
            if (DBG) log(Log.getStackTraceString(new Throwable()));
        }
        return false;
    
private static voidlog(java.lang.String msg)


         
        Log.d(TAG, msg);