蓝牙bluetooth的framework层学习

参考:Android -- Bluetooth framework启动过程简析_第一序列丶的博客-CSDN博客

framework层包括 api、service、bluetooth.apk,这里大致记录下它们间的联系

1、mBluetooth和mBluetoothBinder生成的

case MESSAGE_BLUETOOTH_SERVICE_CONNECTED: {
	IBinder service = (IBinder) msg.obj;
	
	mBinding = false;
	mBluetoothBinder = service;
	mBluetooth = IBluetooth.Stub.asInterface(Binder.allowBlocking(service));

2、BluetoothAdapter与BluetoothManagerService.java建立联系,注册回调

BluetoothAdapter.java

system/bt/binder/android/bluetooth/IBluetoothManager.aidl

private IBluetooth mService;  这个是链接bluetooth.apk的service

BluetoothAdapter(IBluetoothManager managerService) {
	mService = managerService.registerAdapter(mManagerCallback); //这儿返回的mService有可能是空
}

private final IBluetoothManagerCallback mManagerCallback =
		new IBluetoothManagerCallback.Stub() {
			public void onBluetoothServiceUp(IBluetooth bluetoothService) {
				mService = bluetoothService; 
			}
		}

3、各个模块监听BluetoothState的状态
在BluetoothManagerService.java
回调注册:

public void registerStateChangeCallback(IBluetoothStateChangeCallback callback) {
	Message msg = mHandler.obtainMessage(MESSAGE_REGISTER_STATE_CHANGE_CALLBACK);
	msg.obj = callback;
	mHandler.sendMessage(msg);
}

case MESSAGE_REGISTER_STATE_CHANGE_CALLBACK: {
	IBluetoothStateChangeCallback callback =
			(IBluetoothStateChangeCallback) msg.obj;
	mStateChangeCallbacks.register(callback);
	break;
}

回调调用:

    private final IBluetoothCallback mBluetoothCallback = new IBluetoothCallback.Stub() {
        public void onBluetoothStateChange(int prevState, int newState) throws RemoteException {
            Message msg =
                    mHandler.obtainMessage(MESSAGE_BLUETOOTH_STATE_CHANGE, prevState, newState);
            mHandler.sendMessage(msg);
        }
    };

case MESSAGE_BLUETOOTH_STATE_CHANGE: {
	int prevState = msg.arg1;
	int newState = msg.arg2;
	mState = newState;
	bluetoothStateChangeHandler(prevState, newState);

private void sendBluetoothStateCallback(boolean isUp) {
		int n = mStateChangeCallbacks.beginBroadcast();
		for (int i = 0; i < n; i++) {
			try {
				mStateChangeCallbacks.getBroadcastItem(i).onBluetoothStateChange(isUp);
			} catch (RemoteException e) {
				Slog.e(TAG, "Unable to call onBluetoothStateChange() on callback #" + i, e);
			}
		}
}

各个模块注册监听bluetooth状态
比如:BluetoothProfileConnector.java

void connect(Context context, BluetoothProfile.ServiceListener listener) {
	IBluetoothManager mgr = BluetoothAdapter.getDefaultAdapter().getBluetoothManager();
	 mgr.registerStateChangeCallback(mBluetoothStateChangeCallback);
	doBind();
}

4、使能蓝牙开关
BluetoothAdapter.java
enable() , disable(),enableBLE() 可以使能蓝牙,调用到bluetoothmanagerservice.java

BluetoothManagerService.java
public boolean enable(String packageName) throws RemoteException {
	sendEnableMsg(false,
			BluetoothProtoEnums.ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName);
}

case MESSAGE_ENABLE:
	handleEnable(mQuietEnable);

5、bluetoothmanagerservice.java与bluetooth.apk建立联系

private class BluetoothServiceConnection implements ServiceConnection {
	private BluetoothServiceConnection() {
	}

	public void onServiceConnected(ComponentName componentName, IBinder service) {
		String name = componentName.getClassName();
		if (name.equals("com.android.bluetooth.btservice.AdapterService")) {
			msg.arg1 = 1;
		} else {
			if (!name.equals("com.android.bluetooth.gatt.GattService")) {
				Slog.e("wqy--BluetoothManagerService", "Unknown service connected: " + name);
			}
		}
	}

	public void onServiceDisconnected(ComponentName componentName) {
	}
}

private BluetoothManagerService.BluetoothServiceConnection mConnection = new BluetoothManagerService.BluetoothServiceConnection();

private void handleEnable(boolean quietMode) {
	if (!doBind(i, mConnection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT,
			UserHandle.CURRENT)) {}
}

boolean doBind(Intent intent, ServiceConnection conn, int flags, UserHandle user) {
	Slog.e(TAG, "doBind....");
	ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
	intent.setComponent(comp);
	if (comp == null || !mContext.bindServiceAsUser(intent, conn, flags, user)) {
		Slog.e(TAG, "Fail to bind to: " + intent);
		return false;
	}
	return true;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi Bluetooth.framework是一个用于Delphi编程语言的蓝牙开发框架。该框架可以在IOS上实现基于蓝牙的设备通信,并提供了简单易用的API接口。使用该框架进行蓝牙开发,可以快速实现设备之间的数据传输、设备控制等功能。Delphi Bluetooth.framework支持IOS平台上的蓝牙4.0以上版本,包括BLE(Bluetooth Low Energy)协议,可以有效地降低能耗,提高设备的续航能力。此外,该框架还具备很好的扩展性和可定制性,可以根据不同需求自定义蓝牙开发功能。总之,Delphi Bluetooth.framework是一个效率高、开发简单的蓝牙开发框架,可以满足各种蓝牙应用场景的需求。 ### 回答2: Delphi是一种基于Object Pascal语言的编程环境,广泛应用于Windows和macOS平台的应用程序开发。而Bluetooth.Framework是针对macOS平台的,用于支持开发蓝牙相关功能的框架。 Delphi在macOS平台上使用Bluetooth.Framework可以轻松实现如蓝牙设备扫描、连接、数据传输等操作。开发者可以使用Delphi提供的编程接口,直接调用蓝牙框架库中的相关方法,从而达到实现蓝牙功能的目的。 Delphi与Bluetooth.Framework的结合,可以为开发者节省大量的开发时间和精力,使得他们能够更快速地开发出可靠、高效的蓝牙应用程序。总的来说,使用Delphi与Bluetooth.Framework的组合可以大大简化蓝牙开发的难度,提高开发效率和质量。 ### 回答3: Delphi Bluetooth.framework是一个专为iOS应用程序设计者开发的框架,它使开发者可以在iOS设备上使用蓝牙技术来进行数据传输和通信。 Delphi Bluetooth.framework是一个非常灵活和易于使用的框架,使开发者能够很方便地实现蓝牙传输功能,而不必自己编写和实现复杂的蓝牙协议。 框架中包含许多有用的类和方法,可以用于检测和管理蓝牙设备,并建立和维护蓝牙连接等。开发者可以使用这些方法来实现各种功能,例如拍照、数据传输、蓝牙打印等。 Delphi Bluetooth.framework支持通用的蓝牙协议,例如RFCOMM、L2CAP、GATT等,这使得它可以连接几乎所有支持蓝牙的设备。此外,它还支持低功耗蓝牙(BLE),这使得它可以与许多低功耗设备连接。 总体而言,Delphi Bluetooth.framework是一个非常优秀的蓝牙传输框架,可节省开发人员时间和精力,使他们能够专注于应用程序的核心功能开发。它不仅易于使用,而且还为开发者提供了许多有用的功能,可帮助他们实现各种蓝牙传输任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值