笔记之Android Bluetooth OOP 传送文件流程小记

1. BluetoothOppLauncherActivity 保存发送文件信息并调用BluetoothDevicePicker选择设备


2. BluetoothDevicePicker当用户选择完成后会发送ACTION_DEVICE_SELECTED action给BluetoothOppReceiver


3. BluetoothOppReceiver从Intent中获取EXTRA_DEVICE值并调用BluetoothOppManager的startTransfer去插入数据信息至数据库


4. BluetoothOppManager的startTransfer插入数据库后将触发BluetoothOppService中注册的BluetoothShareContentObserver开启UpdateThread线程去读取发送信息并准备发送文件(UpdateThread为单实例线程,如执行完成会自动退出)


5. UpdateThread将调用insertShare函数,将构造BluetoothOppBatch并加入到BluetoothOppTransfer,并调用start


6. BluetoothOppTransfer start函数首先会检查bluetooth状态,启动EventHandler处理session事件。

   如果是OUTBOUND则startConnectSession(去连接远端设备).


7. startConnectSession将调用doOpushSdp,将调用BluetoothDevice的fetchUuidsWithSdp获取设备的支持信息。


8. 如果远端设备支持ObexObjectPush则发送SDP_RESULT给EventHandler。如果OBEX可以在L2cap上传送则创建L2cap的SocketConnectThread,否则创建RFCOMM的SocketConnectThread.


9. SocketConnectThread将根据连接类型(RFcomm 或 L2cap)调用createInsecureEl2capSocket或createInsecureRfcommSocket。并调用生成后socket的connect函数。


10. 如果连接成功后,程序将发送TRANSPORT_CONNECTED action(跟随BluetoothOppTransport实例)给之前的EventHandler。


11. EventHandler收到TRANSPORT_CONNECTED后将调用startObexSession开始Obex交换


12. startObexSession会判读是否为外发(OUTBOUND),如是则new BluetoothOppObexClientSession


13. BluetoothOppObexClientSession start 函数被调用并把EventHandler传入。注意此时会注册ACTION_ACL_DISCONNECTED去监听连接的改变。


14. ClientThread被BluetoothOppObexClientSession start,ClientThread会调用conncet函数发送Obex connect请求。


15. 如果ClientThread conncet成功,然后sendFile(其中包含有obex头信息,文件名与大写等)。值但注意的是在传送的过程中会去监测返回值并且当部分传送成功后会启动ContentResolverUpdateThread更新数据库的进度值。最大的发送大小是双方在connect请求协商后的大小。


16. 传送完成后发调用Constants.updateShareStatus,其中调用sendIntentIfCompleted()去发送TRANSFER_COMPLETED_ACTION.


 在跟完流程会有一个疑问:上层应用与Framework只是做了Bluetooth键盘连接,谁去把远端设备的按键消息与作标信息传给输入流程呢?

    想解答以上问题其实并不复杂,我们只需去查看bluez\input目录下的device.c就可以知道。bluez其实是通过uinput方法去向输入接口传送远端输入event的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值