BluetoothPbappublic 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. |
Fields Summary |
---|
private static final String | TAG | private static final boolean | DBG | private static final boolean | VDBG | public static final String | PBAP_STATEint extra for PBAP_STATE_CHANGED_ACTION | public static final String | PBAP_PREVIOUS_STATEint extra for PBAP_STATE_CHANGED_ACTION | public static final String | PBAP_STATE_CHANGED_ACTIONIndicates 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_ERRORThere was an error trying to obtain the state | public static final int | STATE_DISCONNECTEDNo client currently connected | public static final int | STATE_CONNECTINGConnection attempt in progress | public static final int | STATE_CONNECTEDClient is currently connected | public static final int | RESULT_FAILURE | public static final int | RESULT_SUCCESS | public static final int | RESULT_CANCELEDConnection 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 void | close()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 boolean | disconnect()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;
| boolean | doBind()
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 boolean | doesClassMatchSink(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.
// 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 void | finalize()
try {
close();
} finally {
super.finalize();
}
| public BluetoothDevice | getClient()Get the currently connected remote Bluetooth device (PCE).
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 int | getState()Get the current state of the BluetoothPbap 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 boolean | isConnected(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 void | log(java.lang.String msg)
Log.d(TAG, msg);
|
|