开发过程中会遇到蓝牙开发,目前蓝牙分两种,一种3.0经典蓝牙,可以大数据传输的,可以传输图片,歌曲和视频的;一种是4.0低功耗蓝牙,传输小字节的,比如蓝牙手环;经典蓝牙用途也很多,很多单片机控件也是通过蓝牙串口收发指令进行动作的;
这里是最基本的蓝牙,能收发数据这个蓝牙的用法也很简单,首先要淘宝买个经典蓝牙的模块然后通过usb将模块连接到电脑,在电脑端打开串口助手就可以在串口助手当中看到app发送过来的数据(蓝牙模块传输对于小白来说可能看起来会有点懵,这里不做详细赘述)
这里详细解说一下MainActivity
界面很简单就是一个连接按钮和让设备可见按钮,还有一个发送数据按钮和一个接收内容的TextView;
蓝牙连接的逻辑
- 获得BluetoothAdapter
- 判断有没有蓝牙
- 有的话那就打开蓝牙
- 蓝牙初始化
- 通过蓝牙地址建立连接
- 收发数据
蓝牙连接在6.0系统运行的话就要考虑到权限问题,蓝牙需要一个定位的权限这里是通过一个监听事件来获得权限的,也可以在初始化中获得权限
权限库依赖
compile 'me.weyye.hipermission:library:1.0.3'
定位权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
//进入蓝牙 动态申请定位权限
ic = (ImageView) findViewById(R.id.ic);
ic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//单独的权限只叫ondeny和onguarantee
HiPermission.create(LoginActivity.this).checkSinglePermission(Manifest.permission.ACCESS_COARSE_LOCATION, new PermissionCallback() {
@Override
public void onClose() {
Toast.makeText(LoginActivity.this, "用户关闭权限申请", Toast.LENGTH_SHORT).show();
}
@Override
public void onFinish() {
Toast.makeText(LoginActivity.this, "所有权限申请完成", Toast.LENGTH_SHORT).show();
}
@Override
public void onDeny(String permisson, int position) {
Toast.makeText(LoginActivity.this, "快开启权限", Toast.LENGTH_SHORT).show();
}
@Override
public void onGuarantee(String permisson, int position) {
// startActivity(new Intent(LoginActivity.this,BluetoothActivity.class));
}
});
}
});
里面除了Mainactivity其他的基本上不需要动,开发过程可能会遇到些问题那就是收发数据的格式,具体问题具体分析,也就是说你要是在单片机中发送中文的话,要以GBK格式发送,接收数据的话可能会出现串行,用起来的话可能会遇到各种问题,不过花点时间都是可以解决的,这个也是谷歌的官方DEMO;
网友评论