am 88427cff
: Merge change Ibcfb7d10 into eclair-sdk
Merge commit '88427cff609e668185010af2244500be5823595e' into eclair * commit '88427cff609e668185010af2244500be5823595e': docs: add more documentation for the bluetooth apis.
This commit is contained in:
@ -36,13 +36,30 @@ import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Represents the local Bluetooth adapter.
|
||||
*
|
||||
* <p>Use {@link #getDefaultAdapter} to get the default local Bluetooth
|
||||
* adapter.
|
||||
*
|
||||
* <p>Use the {@link BluetoothDevice} class for operations on remote Bluetooth
|
||||
* Represents the local device Bluetooth adapter. The {@link BluetoothAdapter}
|
||||
* lets you perform fundamental Bluetooth tasks, such as initiate
|
||||
* device discovery, query a list of bonded (paired) devices,
|
||||
* instantiate a {@link BluetoothDevice} using a known MAC address, and create
|
||||
* a {@link BluetoothServerSocket} to listen for connection requests from other
|
||||
* devices.
|
||||
*
|
||||
* <p>To get a {@link BluetoothAdapter} representing the local Bluetooth
|
||||
* adapter, call the static {@link #getDefaultAdapter} method.
|
||||
* Fundamentally, this is your starting point for all
|
||||
* Bluetooth actions. Once you have the local adapter, you can get a set of
|
||||
* {@link BluetoothDevice} objects representing all paired devices with
|
||||
* {@link #getBondedDevices()}; start device discovery with
|
||||
* {@link #startDiscovery()}; or create a {@link BluetoothServerSocket} to
|
||||
* listen for incoming connection requests with
|
||||
* {@link #listenUsingRfcommWithServiceRecord(String,UUID)}.
|
||||
*
|
||||
* <p class="note"><strong>Note:</strong>
|
||||
* Most methods require the {@link android.Manifest.permission#BLUETOOTH}
|
||||
* permission and some also require the
|
||||
* {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission.
|
||||
*
|
||||
* {@see BluetoothDevice}
|
||||
* {@see BluetoothServerSocket}
|
||||
*/
|
||||
public final class BluetoothAdapter {
|
||||
private static final String TAG = "BluetoothAdapter";
|
||||
|
@ -20,25 +20,37 @@ import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
/**
|
||||
* Represents a Bluetooth class.
|
||||
* Represents a Bluetooth class, which describes general characteristics
|
||||
* and capabilities of a device. For example, a Bluetooth class will
|
||||
* specify the general device type such as a phone, a computer, or
|
||||
* headset, and whether it's capable of services such as audio or telephony.
|
||||
*
|
||||
* <p>Bluetooth Class is a 32 bit field. The format of these bits is defined at
|
||||
* http://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
|
||||
* (login required). This class contains that 32 bit field, and provides
|
||||
* constants and methods to determine which Service Class(es) and Device Class
|
||||
* are encoded in that field.
|
||||
* <p>The Bluetooth class is useful as a hint to roughly describe a device (for example to
|
||||
* show an icon in the UI), but does not reliably describe which Bluetooth
|
||||
* profiles or services are actually supported by a device.
|
||||
*
|
||||
* <p>Every Bluetooth Class is composed of zero or more service classes, and
|
||||
* <p>Every Bluetooth class is composed of zero or more service classes, and
|
||||
* exactly one device class. The device class is further broken down into major
|
||||
* and minor device class components.
|
||||
*
|
||||
* <p>Class is useful as a hint to roughly describe a device (for example to
|
||||
* show an icon in the UI), but does not reliably describe which Bluetooth
|
||||
* profiles or services are actually supported by a device. Accurate service
|
||||
* discovery is done through SDP requests.
|
||||
* <p>{@link BluetoothClass} is useful as a hint to roughly describe a device
|
||||
* (for example to show an icon in the UI), but does not reliably describe which
|
||||
* Bluetooth profiles or services are actually supported by a device. Accurate
|
||||
* service discovery is done through SDP requests, which are automatically
|
||||
* performed when creating an RFCOMM socket with {@link
|
||||
* BluetoothDevice#createRfcommSocketToServiceRecord(UUID)} and {@link
|
||||
* BluetoothAdapter#listenUsingRfcommWithServiceRecord(String,UUID)}</p>
|
||||
*
|
||||
* <p>Use {@link BluetoothDevice#getBluetoothClass} to retrieve the class for
|
||||
* a remote device.
|
||||
*
|
||||
* <!--
|
||||
* The Bluetooth class is a 32 bit field. The format of these bits is defined at
|
||||
* http://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
|
||||
* (login required). This class contains that 32 bit field, and provides
|
||||
* constants and methods to determine which Service Class(es) and Device Class
|
||||
* are encoded in that field.
|
||||
* -->
|
||||
*/
|
||||
public final class BluetoothClass implements Parcelable {
|
||||
/**
|
||||
@ -91,7 +103,7 @@ public final class BluetoothClass implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Bluetooth service classes.
|
||||
* Defines all service class constants.
|
||||
* <p>Each {@link BluetoothClass} encodes zero or more service classes.
|
||||
*/
|
||||
public static final class Service {
|
||||
@ -109,7 +121,8 @@ public final class BluetoothClass implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the specified service class is supported by this class.
|
||||
* Return true if the specified service class is supported by this
|
||||
* {@link BluetoothClass}.
|
||||
* <p>Valid service classes are the public constants in
|
||||
* {@link BluetoothClass.Service}. For example, {@link
|
||||
* BluetoothClass.Service#AUDIO}.
|
||||
@ -122,17 +135,22 @@ public final class BluetoothClass implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Bluetooth device classes.
|
||||
* Defines all device class constants.
|
||||
* <p>Each {@link BluetoothClass} encodes exactly one device class, with
|
||||
* major and minor components.
|
||||
* <p>The constants in {@link
|
||||
* BluetoothClass.Device} represent a combination of major and minor
|
||||
* components (the complete device class). The constants in {@link
|
||||
* BluetoothClass.Device.Major} represent just the major device classes.
|
||||
* device components (the complete device class). The constants in {@link
|
||||
* BluetoothClass.Device.Major} represent only major device classes.
|
||||
* <p>See {@link BluetoothClass.Service} for service class constants.
|
||||
*/
|
||||
public static class Device {
|
||||
private static final int BITMASK = 0x1FFC;
|
||||
|
||||
/**
|
||||
* Defines all major device class constants.
|
||||
* <p>See {@link BluetoothClass.Device} for minor classes.
|
||||
*/
|
||||
public static class Major {
|
||||
private static final int BITMASK = 0x1F00;
|
||||
|
||||
@ -215,7 +233,7 @@ public final class BluetoothClass implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the major device class component of this Bluetooth class.
|
||||
* Return the major device class component of this {@link BluetoothClass}.
|
||||
* <p>Values returned from this function can be compared with the
|
||||
* public constants in {@link BluetoothClass.Device.Major} to determine
|
||||
* which major class is encoded in this Bluetooth class.
|
||||
|
@ -31,16 +31,31 @@ import java.io.UnsupportedEncodingException;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Represents a remote Bluetooth device.
|
||||
*
|
||||
* <p>Use {@link BluetoothAdapter#getRemoteDevice} to create a {@link
|
||||
* BluetoothDevice}.
|
||||
* Represents a remote Bluetooth device. A {@link BluetoothDevice} lets you
|
||||
* create a connection with the repective device or query information about
|
||||
* it, such as the name, address, class, and bonding state.
|
||||
*
|
||||
* <p>This class is really just a thin wrapper for a Bluetooth hardware
|
||||
* address. Objects of this class are immutable. Operations on this class
|
||||
* are performed on the remote Bluetooth hardware address, using the
|
||||
* {@link BluetoothAdapter} that was used to create this {@link
|
||||
* BluetoothDevice}.
|
||||
*
|
||||
* <p>To get a {@link BluetoothDevice}, use
|
||||
* {@link BluetoothAdapter#getRemoteDevice(String)
|
||||
* BluetoothAdapter.getRemoteDevice(String)} to create one representing a device
|
||||
* of a known MAC address (which you can get through device discovery with
|
||||
* {@link BluetoothAdapter}) or get one from the set of bonded devices
|
||||
* returned by {@link BluetoothAdapter#getBondedDevices()
|
||||
* BluetoothAdapter.getBondedDevices()}. You can then open a
|
||||
* {@link BluetoothSocket} for communciation with the remote device, using
|
||||
* {@link #createRfcommSocketToServiceRecord(UUID)}.
|
||||
*
|
||||
* <p class="note"><strong>Note:</strong>
|
||||
* Requires the {@link android.Manifest.permission#BLUETOOTH} permission.
|
||||
*
|
||||
* {@see BluetoothAdapter}
|
||||
* {@see BluetoothSocket}
|
||||
*/
|
||||
public final class BluetoothDevice implements Parcelable {
|
||||
private static final String TAG = "BluetoothDevice";
|
||||
|
@ -27,29 +27,31 @@ import java.io.IOException;
|
||||
* <p>The interface for Bluetooth Sockets is similar to that of TCP sockets:
|
||||
* {@link java.net.Socket} and {@link java.net.ServerSocket}. On the server
|
||||
* side, use a {@link BluetoothServerSocket} to create a listening server
|
||||
* socket. It will return a new, connected {@link BluetoothSocket} on an
|
||||
* accepted connection. On the client side, use the same
|
||||
* {@link BluetoothSocket} object to both intiate the outgoing connection,
|
||||
* and to manage the connected socket.
|
||||
* socket. When a connection is accepted by the {@link BluetoothServerSocket},
|
||||
* it will return a new {@link BluetoothSocket} to manage the connection.
|
||||
* On the client side, use a single {@link BluetoothSocket} to both intiate
|
||||
* an outgoing connection and to manage the connection.
|
||||
*
|
||||
* <p>The most common type of Bluetooth Socket is RFCOMM. RFCOMM is a
|
||||
* connection orientated, streaming transport over Bluetooth. It is also known
|
||||
* as the Serial Port Profile (SPP).
|
||||
* <p>The most common type of Bluetooth socket is RFCOMM, which is the type
|
||||
* supported by the Android APIs. RFCOMM is a connection-oriented, streaming
|
||||
* transport over Bluetooth. It is also known as the Serial Port Profile (SPP).
|
||||
*
|
||||
* <p>Use {@link BluetoothDevice#createRfcommSocketToServiceRecord} to create
|
||||
* a new {@link BluetoothSocket} ready for an outgoing connection to a remote
|
||||
* {@link BluetoothDevice}.
|
||||
* <p>To create a listenting {@link BluetoothServerSocket} that's ready for
|
||||
* incoming connections, use
|
||||
* {@link BluetoothAdapter#listenUsingRfcommWithServiceRecord
|
||||
* BluetoothAdapter.listenUsingRfcommWithServiceRecord()}. Then call
|
||||
* {@link #accept()} to listen for incoming connection requests. This call
|
||||
* will block until a connection is established, at which point, it will return
|
||||
* a {@link BluetoothSocket} to manage the connection.
|
||||
*
|
||||
* <p>Use {@link BluetoothAdapter#listenUsingRfcommWithServiceRecord} to
|
||||
* create a listening {@link BluetoothServerSocket} ready for incoming
|
||||
* connections to the local {@link BluetoothAdapter}.
|
||||
*
|
||||
* <p>{@link BluetoothSocket} and {@link BluetoothServerSocket} are thread
|
||||
* <p>{@link BluetoothServerSocket} is thread
|
||||
* safe. In particular, {@link #close} will always immediately abort ongoing
|
||||
* operations and close the socket.
|
||||
* operations and close the server socket.
|
||||
*
|
||||
* <p>All methods on a {@link BluetoothServerSocket} require
|
||||
* {@link android.Manifest.permission#BLUETOOTH}
|
||||
* <p class="note"><strong>Note:</strong>
|
||||
* Requires the {@link android.Manifest.permission#BLUETOOTH} permission.
|
||||
*
|
||||
* {@see BluetoothSocket}
|
||||
*/
|
||||
public final class BluetoothServerSocket implements Closeable {
|
||||
|
||||
|
@ -33,29 +33,41 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||
* <p>The interface for Bluetooth Sockets is similar to that of TCP sockets:
|
||||
* {@link java.net.Socket} and {@link java.net.ServerSocket}. On the server
|
||||
* side, use a {@link BluetoothServerSocket} to create a listening server
|
||||
* socket. It will return a new, connected {@link BluetoothSocket} on an
|
||||
* accepted connection. On the client side, use the same
|
||||
* {@link BluetoothSocket} object to both intiate the outgoing connection,
|
||||
* and to manage the connected socket.
|
||||
* socket. When a connection is accepted by the {@link BluetoothServerSocket},
|
||||
* it will return a new {@link BluetoothSocket} to manage the connection.
|
||||
* On the client side, use a single {@link BluetoothSocket} to both intiate
|
||||
* an outgoing connection and to manage the connection.
|
||||
*
|
||||
* <p>The most common type of Bluetooth Socket is RFCOMM. RFCOMM is a
|
||||
* connection orientated, streaming transport over Bluetooth. It is also known
|
||||
* as the Serial Port Profile (SPP).
|
||||
* <p>The most common type of Bluetooth socket is RFCOMM, which is the type
|
||||
* supported by the Android APIs. RFCOMM is a connection-oriented, streaming
|
||||
* transport over Bluetooth. It is also known as the Serial Port Profile (SPP).
|
||||
*
|
||||
* <p>Use {@link BluetoothDevice#createRfcommSocketToServiceRecord} to create
|
||||
* a new {@link BluetoothSocket} ready for an outgoing connection to a remote
|
||||
* {@link BluetoothDevice}.
|
||||
* <p>To create a {@link BluetoothSocket} for connecting to a known device, use
|
||||
* {@link BluetoothDevice#createRfcommSocketToServiceRecord
|
||||
* BluetoothDevice.createRfcommSocketToServiceRecord()}.
|
||||
* Then call {@link #connect()} to attempt a connection to the remote device.
|
||||
* This call will block until a connection is established or the connection
|
||||
* fails.
|
||||
*
|
||||
* <p>Use {@link BluetoothAdapter#listenUsingRfcommWithServiceRecord} to
|
||||
* create a listening {@link BluetoothServerSocket} ready for incoming
|
||||
* connections to the local {@link BluetoothAdapter}.
|
||||
* <p>To create a {@link BluetoothSocket} as a server (or "host"), see the
|
||||
* {@link BluetoothServerSocket} documentation.
|
||||
*
|
||||
* <p>{@link BluetoothSocket} and {@link BluetoothServerSocket} are thread
|
||||
* <p>Once the socket is connected, whether initiated as a client or accepted
|
||||
* as a server, open the IO streams by calling {@link #getInputStream} and
|
||||
* {@link #getOutputStream} in order to retrieve {@link java.io.InputStream}
|
||||
* and {@link java.io.OutputStream} objects, respectively, which are
|
||||
* automatically connected to the socket.
|
||||
*
|
||||
* <p>{@link BluetoothSocket} is thread
|
||||
* safe. In particular, {@link #close} will always immediately abort ongoing
|
||||
* operations and close the socket.
|
||||
*
|
||||
* <p>All methods on a {@link BluetoothSocket} require
|
||||
* {@link android.Manifest.permission#BLUETOOTH}
|
||||
* <p class="note"><strong>Note:</strong>
|
||||
* Requires the {@link android.Manifest.permission#BLUETOOTH} permission.
|
||||
*
|
||||
* {@see BluetoothServerSocket}
|
||||
* {@see java.io.InputStream}
|
||||
* {@see java.io.OutputStream}
|
||||
*/
|
||||
public final class BluetoothSocket implements Closeable {
|
||||
private static final String TAG = "BluetoothSocket";
|
||||
|
@ -1,13 +1,109 @@
|
||||
<HTML>
|
||||
<BODY>
|
||||
Provides classes that manage Bluetooth functionality on the device.
|
||||
<p>
|
||||
The Bluetooth APIs allow applications can connect and disconnect headsets, or scan
|
||||
for other kinds of Bluetooth devices and pair them. Further control includes the
|
||||
ability to write and modify the local Service Discovery Protocol (SDP) database,
|
||||
query the SDP database of other Bluetooth devices, establish RFCOMM
|
||||
channels/sockets on Android, and connect to specified sockets on other devices.
|
||||
Provides classes that manage Bluetooth functionality, such as scanning for
|
||||
devices, connecting with devices, and managing data transfer between devices.
|
||||
|
||||
<p>The Bluetooth APIs let applications:</p>
|
||||
<ul>
|
||||
<li>Scan for other Bluetooth devices</li>
|
||||
<li>Query the local Bluetooth adapter for paired Bluetooth devices</li>
|
||||
<li>Establish RFCOMM channels/sockets</li>
|
||||
<li>Connect to specified sockets on other devices</li>
|
||||
<li>Transfer data to and from other devices</li>
|
||||
</ul>
|
||||
|
||||
<p class="note"><strong>Note:</strong>
|
||||
To perform Bluetooth communication using these APIs, an application must
|
||||
declare the {@link android.Manifest.permission#BLUETOOTH} permission. Some
|
||||
additional functionality, such as requesting device discovery and
|
||||
pairing also requires the {@link android.Manifest.permission#BLUETOOTH_ADMIN}
|
||||
permission.
|
||||
</p>
|
||||
<p>Remember, not all Android devices are guaranteed to have Bluetooth functionality.</p>
|
||||
|
||||
<h3>Overview</h3>
|
||||
|
||||
<p>Here's a basic introduction to the Bluetooth classes:</p>
|
||||
<dl>
|
||||
<dt>{@link android.bluetooth.BluetoothAdapter}</dt>
|
||||
<dd>This represents the local Bluetooth adapter, which is essentially the
|
||||
entry-point to performing any interaction with Bluetooth. With it, you can
|
||||
discover other Bluetooth devices, query a list of bonded (paired) devices,
|
||||
initialize a {@link android.bluetooth.BluetoothDevice} using a known MAC
|
||||
address, and create a {@link android.bluetooth.BluetoothServerSocket} to
|
||||
listen for communications from other devices.</dd>
|
||||
|
||||
<dt>{@link android.bluetooth.BluetoothDevice}</dt>
|
||||
<dd>This represents a remote Bluetooth device. Use this to request a
|
||||
connection with a remote device through a
|
||||
{@link android.bluetooth.BluetoothSocket}
|
||||
or query information about the device such as its name, address, class, and
|
||||
bonding state.</dd>
|
||||
|
||||
<dt>{@link android.bluetooth.BluetoothSocket}</dt>
|
||||
<dd>This represents the interface for a Bluetooth socket
|
||||
(similar to a TCP client-side {@link java.net.Socket}). This is the
|
||||
connection point that allows an app to transfer data with another Bluetooth
|
||||
device via {@link java.io.InputStream} and {@link java.io.OutputStream}.</dd>
|
||||
<dt>{@link android.bluetooth.BluetoothServerSocket}</dt>
|
||||
|
||||
<dd>This represents an open server socket that listens for incoming requests
|
||||
(similar to a TCP server-side {@link java.net.ServerSocket}).
|
||||
When attempting to connect two Android devices, one device will need to open
|
||||
a server socket with this class. When a connection is accepted, a new
|
||||
{@link android.bluetooth.BluetoothSocket} will be returned,
|
||||
which can be used to manage the connection and transfer data.</dd>
|
||||
|
||||
<dt>{@link android.bluetooth.BluetoothClass}</dt>
|
||||
<dd>This represents the Bluetooth class for a device which describes general
|
||||
characteristics and capabilities of a device. This class and its subclasses
|
||||
don't provide any actual functionality. The sub-classes are entirely composed
|
||||
of constants for the device and service class definitions.</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
<h3>Example Procedure</h3>
|
||||
|
||||
<p>For example, here's an pseudo-code procedure for discovering and
|
||||
connecting a remote device, and transfering data:</p>
|
||||
|
||||
<ol>
|
||||
<li>Register a {@link android.content.BroadcastReceiver} that accepts the
|
||||
{@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent.</li>
|
||||
<li>Call {@link android.bluetooth.BluetoothAdapter#getDefaultAdapter} to
|
||||
retrieve the Android system's local
|
||||
{@link android.bluetooth.BluetoothAdapter}.</li>
|
||||
<li>Call {@link android.bluetooth.BluetoothAdapter#startDiscovery()
|
||||
BluetoothAdapter.startDiscovery()} to scan for local devices. This is where
|
||||
the BroadcastReceiver comes in; Android now scans for devices and will
|
||||
broadcast the {@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent
|
||||
for each remote device discovered. The
|
||||
{@link android.content.BroadcastReceiver}
|
||||
you created will receive each Intent.</li>
|
||||
<li>The {@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent
|
||||
includes the {@link android.bluetooth.BluetoothDevice#EXTRA_DEVICE}
|
||||
Parcelable extra, which is a {@link android.bluetooth.BluetoothDevice}
|
||||
object. Extract this from the Intent and call
|
||||
{@link android.bluetooth.BluetoothDevice#createRfcommSocketToServiceRecord(java.util.UUID)
|
||||
BluetoothDevice.createRfcommSocketToServiceRecord()}
|
||||
to open a {@link android.bluetooth.BluetoothSocket} with a chosen
|
||||
remote device.</li>
|
||||
<li>Call {@link android.bluetooth.BluetoothSocket#connect()
|
||||
BluetoothSocket.connect()} to connect with the remote device.</li>
|
||||
<li>When successfully connected, call
|
||||
{@link android.bluetooth.BluetoothSocket#getInputStream()
|
||||
BluetoothSocket.getInputStream()} and/or
|
||||
{@link android.bluetooth.BluetoothSocket#getOutputStream()
|
||||
BluetoothSocket.getOutputStream()} to retreive an
|
||||
{@link java.io.InputStream} and {@link java.io.OutputStream}, respectively,
|
||||
which are hooked into the socket.</li>
|
||||
<li>Use {@link java.io.InputStream#read(byte[]) InputStream.read()} and
|
||||
{@link java.io.OutputStream#write(byte[]) OutputStream.write()} to transfer
|
||||
data.</li>
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
<p class="note"><strong>Note:</strong>
|
||||
Not all Android devices are guaranteed to have Bluetooth functionality.</p>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
Reference in New Issue
Block a user