资源说明:在SystemServer 启动的时候,会生成一个BluetoothDeviceService 的实例,
// Skip Bluetooth if we have an emulator kernel
// TODO: Use a more reliable check to see if this product should
// support Bluetooth - see bug 988521
if (SystemProperties.get("ro.kernel.qemu").equals("1")) {
Log.i(TAG, "Registering null Bluetooth Service (emulator)");
ServiceManager.addService(Context.BLUETOOTH_SERVICE, null);
} else if (factoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL) {
Log.i(TAG, "Registering null Bluetooth Service (factory test)");
ServiceManager.addService(Context.BLUETOOTH_SERVICE, null);
} else {
Log.i(TAG, "Starting Bluetooth Service.");
bluetooth = new BluetoothDeviceService(context);
bluetooth.init();
ServiceManager.addService(Context.BLUETOOTH_SERVICE, bluetooth);
int bluetoothOn = Settings.System.getInt(mContentResolver,
Settings.System.BLUETOOTH_ON, 0);
if (bluetoothOn > 0) {
bluetooth.enable(null);
}
}
BluetoothDeviceService 会生成一个BluetoothEventLoop 实例,它们两者均通过DBUS 来和
BlueZ 通信。BluetoothDeviceService 是通过DBUS 向BlueZ 发送命令,而命令的返回结果则
是由BlueZ 通过DBUS 传回给BluetoothEventLoop 的(具体交互请参见BlueZ 的
dbus_api.txt ) ,BlueZ 也会通过DBUS 向BluetoothEventLoop 发送一些事件通知。
BluetoothEventLoop 和外部的接口是通过预先定义的Intent,
初始的时候蓝牙是没有使能的,要通过BluetoothSettings 或者WirelessSettings 来打开蓝牙设
备,然后通过BluetoothSettings 去查找附近的其他蓝牙设备,找到后可以建立RFCOMM 连
接和配对。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。