Bluetooth APIs were made available as part of the Android 2.0 SDK. Clearly, that means
that not all Android devices have Bluetooth hardware. However, this is a popular consumer
feature that Android developers can use to their advantage.When Bluetooth hardware
is present,Android applications can
・Scan for and discover Bluetooth devices and interact with the Bluetooth adapter.
n Establish RFCOMM connections and transfer data to and from devices via data
streams.
・Maintain point-to-point and multipoint connections with Bluetooth devices and
manage multiple connections.
The Bluetooth APIs are part of the android.bluetooth package.As you might expect,
the application must have permission to use the Bluetooth services.The
android.permission.BLUETOOTH permission is required to connect to Bluetooth devices.
Similarly,Android applications must have the android.permission.BLUETOOTH_ADMIN
permission in order to administer Bluetooth hardware and related services, including tasks
enabling or disabling the hardware and performing discovery scans.
The Bluetooth APIs are divided into several useful classes, including
n The BluetoothAdapter class represents the Bluetooth radio hardware on the
local device.
・The BluetoothDevice class represents a remote Bluetooth device.
・The BluetoothServerSocket class is used to open a socket to listen for incoming
connections and provides a BluetoothSocket object when a connection is made.
・The BluetoothSocket class is used by the client to establish a connection to a remote
device.After the device is connected, BluetoothSocket object is used by both
sides to handle the connection and retrieve the input and output streams.
Checking for the Existence of Bluetooth Hardware
The first thing to do when trying to enable Bluetooth functionality within your application
is to establish whether or not the device has a Bluetooth radio.You can do this by
calling and checking the return value of the BluetoothAdapter class's static method
called getDefaultAdapter().
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
if (btAdapter == null) {
Log.d(DEBUG_TAG, "No bluetooth available.");
// ...
} else {
// bt available
}
Enabling Bluetooth
After you have determined that the device has a Bluetooth radio, you need to check to
see if it is enabled using the BluetoothAdapter class method called isEnabled(). If the
Bluetooth adapter is enabled, you can proceed. Otherwise, you need to request that it is
turned on.This can be done in several ways:
・Fire off the BluetoothAdapter.ACTION_REQUEST_ENABLE Intent using the
startActivityForResult() method.This launches an Activity that enables the
user to choose to turn on the Bluetooth adapter. If the result is RESULT_OK, then
Bluetooth has been enabled; otherwise, the user canceled the Bluetooth-enabling
process.
・Call the BluetoothAdapter enable() method.This method should only be used
by applications that need to explicitly enable the Bluetooth radio and requires the
BLUETOOTH_ADMIN permission. In addition, it should only be performed as the
result of a direct request from the user, such as through a button, menu item, and
query dialog.
・The process of making an Android device discoverable also automatically enables
Bluetooth.This can be achieved by firing off the BluetoothAdapter.ACTION_
REQUEST_DISCOVERABLE Intent using the startActivityForResult() method.
This launches an Activity that presents the user with a choice to make their
device discoverable for a set amount of time.
Querying for Paired Devices
You can use the BluetoothAdapter to query for available Bluetooth devices to connect
to.The getBondedDevices() method returns a set of BluetoothDevice objects that represent
the devices paired to the Bluetooth adapter.
Set<BluetoothDevice> pairedBtDevices = btAdapt.getBondedDevices();
Discovering Devices
New Bluetooth devices must be discovered and paired to the adapter before use.You can
use the BluetoothAdapter to start and stop the discovery process for available Bluetooth
devices to connect to.The startDiscovery() method starts the discovery process asynchronously.
This method requires the android.permission.BLUETOOTH_ADMIN permission.
After you have initiated the discovery process, your application needs to register to
receive broadcasts for the following Intents:
・ACTION_DISCOVERY_STARTED: Occurs when the discovery process initiates
・ACTION_FOUND: Occurs each time a remote Bluetooth device is found
・ACTION_DISCOVERY_FINISHED: Occurs when the discovery process completes
The discovery process is resource and time-intensive.You can use the isDiscovering()
method to test if the discovery process is currently underway.The cancelDiscovery()
method can be used to stop the discovery process.This method should also be used any
time a connection is about to be established with a remote Bluetooth device.
Establishing Connections Between Devices
The general idea behind connecting two devices via Bluetooth is for one device to find
the other device via whatever means necessary, depending upon whether it be a previously
paired device or found through discovery. After it's found, the device calls the
connect() method. Both devices then have a valid BluetoothSocket object that can be
used to retrieve the InputStream and OutputStream objects for initiating data communications
between the two devices.
running
on both devices, as it usually is, this means both devices should find a remote device
and both should be discoverable so they can also be found, as well as open a listening
socket via the BluetoothServerSocket object so they can receive incoming connection
requests, and be able to connect to the other device. Add to that the fact that both the
calls to the accept() method of the BluetoothServerSocket class and to the connect()
method of the BluetoothSocket class are blocking synchronous calls, and you can
quickly see you need to use some threads here. Discovery also uses a fair amount of the
Bluetooth hardware resources, so you need to cancel and then later restart this process as
appropriate. Performing discovery during a connection or even while attempting a connection
likely leads to negative device performance.
0 件のコメント:
コメントを投稿