zoukankan      html  css  js  c++  java
  • Android蓝牙联机Demo解析

    写在前面:

    手游的双人对战实现方式有很多,比如:

    • 联网对战(需要一个服务器负责转发客户端请求,各种大型手游的做法)
    • 分屏对战(手机上下分屏,典型的例子就是切水果的双人对战)
    • 蓝牙联机对战(通过蓝牙联机,典型的例子是三国Kill联机版)

    首先,联网对战不考虑(成本高,服务器贵..),而分屏对战局限性太大(两个人用一个手机玩,太不方便了)

    所以蓝牙联机对战是不错的选择,低成本,可实现(三国Kill就是最好的例子,至少证明了这是可行的)

    一.资源搜集

    搜索“安卓开发蓝牙联机”,找到很多有用的信息,经过筛选发现大多信息都是与BluetoothChat有关的,了解后发现BluetoothChat是一个官方Demo,这就好办了

    先把源码down过来,又顺便找到了前辈的源码解析,省了好多事儿,简单整理了一下,资源如下:(前两个来自网络,后两个是新鲜出炉的)

    二.Demo测试

    拿到Demo先确定可以用:

    1. 导入Eclipse,出现红叉叉,修改AndroidManifest.xml中的SDK版本,红叉叉没了
    2. 连接手机,安装运行,程序异常终止,检查Log,错误信息为you can not combine custom titles with other title
    3. 最后更改资源文件解决了这个问题,问题详细及解决方案如下:
    4. 测试成功,真机联机聊天没问题

    使用Demo中可能遇到的问题:

    • you can not combine custom titles with other title错误原因以及怎么解决?
    原因:xml里面定义的activity的theme和代码定义的theme不一致,即title样式冲突
    解决方案:把xml里对应的activity里的theme改成@android:style/Theme
    注意:如果xml里activity没有theme标签,应该添加theme标签并设置为上面的值

    真机运行效果如下:

    三.蓝牙联机过程

    1. 声明蓝牙相关权限(关于权限的详细见前辈的源码解析,不在此赘述)
    2. 获取本机蓝牙适配器(BluetoothAdapter是系统提供的蓝牙接口,通过适配器操作本机蓝牙)
    3. 扫描可连接的外部蓝牙设备(通过接收蓝牙模块返回的广播消息得到外部设备的相关信息)
    4. 获取外部设备的MAC地址
    5. 通过MAC地址建立Socket连接(有了Socket连接就好办了,下面的工作和一般的Socket聊天程序没什么区别了)
    6. 通过Socket连接收发消息

    简单的说,联机过程就是上面几个步骤,笔者对源码进行理解分析后(参照了前辈的源码解析),补充了更易读的注释,如:

    四.总结

    源码分析是一件耗时耗力的事情,但如果有时间的话,这样的付出绝对是值得的,比单纯的copy-modify要好很多,在分析别人的代码过程中,我们可以得到这些东西:

    • 实现原理(比如用来实现功能的各个组件的分工、交互,而不只是简单的了解代码块的功能)
    • 编码规范(比如一开始会很好奇为什么要分方法,分类,分层...)
    • 编码风格(变量、方法、类、包的命名规则,缩进风格...)
    • 小技巧/常识(比如为了避免发布前删除调试信息的工作,可以定义一个标识变量表示处于调试阶段,把所有输出调试信息的代码包裹在if块中,发布前只需要把标识变量改为false即可)
  • 相关阅读:
    oracle python操作 增删改查
    python连接oracle
    opengl问题
    [转]C++ 获取文件夹下的所有文件名
    @RequestMapping[转]
    hdu 6082
    maven/ssm框架搭建
    windows下mysql解压版安装及centos下mysql root密码忘记
    maven创建web项目
    eclipse用tomcat发布网站的目录
  • 原文地址:https://www.cnblogs.com/ayqy/p/4110318.html
Copyright © 2011-2022 走看看