蓝牙打开从app层到协议栈的跨度太大,仅仅看代码很容易迷失方向,先从log看起。
01-18 18:25:31.570 D/BluetoothAdapterService(21885): onCreate() // adapterservice启动
01-18 18:25:31.570 I/BluetoothVendorJni(21885): classInitNative: succeeds
01-18 18:25:31.570 D/BluetoothAdapterState(21885): make() - Creating AdapterState
01-18 18:25:31.580 I/BluetoothAdapterState(21885): Entering OffState
01-18 18:25:31.580 I/bt_btif (21885): init 然后调用到init方法
01-18 18:25:31.580 D/bt_osi_allocation_tracker(21885): canary initialized
01-18 18:25:31.590 I/bt_osi_thread(21885): run_thread: thread id 21915, thread name stack_manager started
在AdapterService文件里面会先调用classInitNative方法,这个方法的定义在JNI文件中,定义如下:
static void classInitNative(JNIEnv* env, jclass clazz) {
int err;
hw_module_t* module;
jclass jniCallbackClass =
env->FindClass("com/android/bluetooth/btservice/JniCallbacks");
sJniCallbacksField = env->GetFieldID(clazz, "mJniCallbacks",

本文详细介绍了Android应用开启蓝牙时,从AdapterService的onCreate方法开始,经过BluetoothVendorJni的classInitNative,到协议栈的初始化,包括线程创建、回调函数设置等整个流程。通过日志跟踪,展示了从app层到协议栈的蓝牙启动步骤。
最低0.47元/天 解锁文章
1149

被折叠的 条评论
为什么被折叠?



