项目里要将原来的串口通信改成蓝牙通信,开始学习蓝牙通信。
最初版本的效果图:(两个GIF是分开录的,时间有点不同步,请见谅)
功能十分简单,Client端三个按钮,分别是蓝牙开关、本机可被搜索和搜索设备,点击搜索设备即可搜索周围的蓝牙,点击搜索到的蓝牙即可连接并自动发送test。
Server端更简单,在接收到消息之后便Toast出来。具体实现看代码
注:Client端搜索设备时,Server端不仅要打开蓝牙还要将蓝牙置为可被发现状态
Client端代码:
public class MainActivity extends AppCompatActivity {
//蓝牙通信需要相同的UUID和对方的蓝牙地址,UUID规定是下面的格式,只要格式对,两边的UUID相同,数字可以改变,不影响通信,但一般都是用下面这种
static final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";
Button btnSearch, btnDis;//定义布局中的按钮
ToggleButton tbtnSwitch;//显示蓝牙开关状态的双状态按钮
ListView lvBTDevices; //搜索到的蓝牙列表
ArrayAdapter<String> adtDevices; //将本机的蓝牙地址显示
List<String> lstDevices = new ArrayList<String>();//列表中蓝牙的地址
BluetoothAdapter btAdapt; //定义移动设备的本地的蓝牙适配器
public static BluetoothSocket btSocket; //Socket用来接受客户端的要求
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //加载 布局
// Button 设置 通过findViewById的方法来定义
//获得所有控件对象
btnSearch = (Button) this.findViewById(R.id.btnSearch);
btnDis = (Button) this.findViewById(R.id.btnDis);
tbtnSwitch = (ToggleButton) this.findViewById(R.id.tbtnSwitch);
//给所有的控件设置监听器
btnDis.setOnClickListener(new ClickEvent());
btnSearch.setOnClickListener(new ClickEvent());
tbtnSwitch.setOnClickListener(new ClickEvent());
// ListView及其数据源 适配器
lvBTDevices = (ListView) this.findViewById(R.id.lvDevices);
adtDevices = new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, lstDevices);
lvBTDevices.setAdapter(adtDevices);
lvBTDevices.s