我使用的uni-app
发送
已搜索的蓝牙:
蓝牙名称:{{item.name}}
SN:{{item.SN}}
已匹配的蓝牙:
蓝牙名称:{{item.name}}
SN:{{item.SN}}
打开蓝牙
关闭蓝牙
搜索蓝牙
varmain, Context, BluetoothManager, BluetoothAdapter, BManager, BAdapter,BluetoothDevice,IntentFilter,bluetoothSocket,device;
exportdefault{
data() {return{
bArray:[],//用于搜索蓝牙去重用的
no_match_list:[],//没有配对的蓝牙列表
match_list:[],//已配对的蓝牙列表
send_data_onoff:false,
send_data_list:'',//要发送的数据
};
},
onShow() {//获取android应用Activity对象
main =plus.android.runtimeMainActivity();
Context= plus.android.importClass("android.content.Context");
BManager=main.getSystemService(Context.BLUETOOTH_SERVICE);//蓝牙适配器
BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");//蓝牙本地适配器
BAdapter =BluetoothAdapter.getDefaultAdapter();//蓝牙设备
BluetoothDevice = plus.android.importClass('android.bluetooth.BluetoothDevice');//过滤器
IntentFilter = plus.android.importClass('android.content.IntentFilter');
},
methods:{/**
* 根据蓝牙地址,连接设备
* @param {Object} address
* @return {Boolean}*/print(address){
console.log(address)
let that=thisuni.showModal({
title:'提示',
content:'是连接此蓝牙?',
success: function (res) {if(res.confirm) {
console.log('用户点击确定');
uni.showLoading({
title:'蓝牙连接中...'});
that.print_bluetooth(address)
}
}
});
},//连接蓝牙
print_bluetooth(mac_address){
let that=thisuni.hideLoading()
let UUID= plus.android.importClass("java.util.UUID");
let uuid= UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
device=BAdapter.getRemoteDevice(mac_address);
plus.android.importClass(device);
bluetoothSocket=device.createInsecureRfcommSocketToServiceRecord(uuid);
plus.android.importClass(bluetoothSocket);if (!bluetoothSocket.isConnected()) {
console.log('检测到设备未连接,尝试连接....');
bluetoothSocket.connect();
}
console.log('设备已连接');//打开输入发送数据
that.send_data_onoff=true;
},//发送蓝牙数据
send_data(){
let that=thisconsole.log()if(bluetoothSocket.isConnected()) {
console.log(22222)var outputStream =bluetoothSocket.getOutputStream();
plus.android.importClass(outputStream);var string =that.send_data_listvar bytes = plus.android.invoke(string, 'getBytes', 'gbk');//创建输出流失败
outputStream.write(bytes);//outputStream.flush();//device = null//这里关键//bluetoothSocket.close();//必须关闭蓝牙连接否则意外断开的话打印错误
}
},
open_bluetooth(){if(!BAdapter.isEnabled()) {
BAdapter.enable();//启动蓝牙
uni.showToast({
title:'蓝牙已启动',
duration:2000})
}
},//关闭蓝牙
close_bluetooth(){
let that=this
//关闭蓝牙都把之前的清空
that.no_match_list=[];
that.match_list=[]if(BAdapter.isEnabled()) {
BAdapter.disable();//关闭蓝牙
uni.showToast({
title:'蓝牙已关闭',
duration:2000})
}
},//获取已匹配蓝牙设备
bluetooth_list(){
let that=this
//先清空
that.match_list=[]var lists =BAdapter.getBondedDevices();
plus.android.importClass(lists);var iterator =lists.iterator();
plus.android.importClass(iterator);while(iterator.hasNext()) {var d =iterator.next();
plus.android.importClass(d);
let arr={"name": d.getName(),"SN": d.getAddress()
}
that.match_list.push(arr)
}
},//搜索没匹配的蓝牙设备
search_bluetooth(address){
let that=this
//判断蓝牙是否开启
if (!BAdapter.isEnabled()) {
uni.showToast({
title:'请先打开蓝牙',
duration:3000});return}if(address.length!=undefined){
uni.showModal({
title:'提示',
content:'是否配对此蓝牙?',
success: function (res) {if(res.confirm) {
console.log('用户点击确定');
uni.showLoading({
title:'蓝牙匹配中...'});
that.search_pipei(address)
}
}
});
}else{
uni.showLoading({
title:'蓝牙搜索中...'});
that.search_pipei()
}
},//搜索和匹配蓝牙
search_pipei(address){
let that=this
//获取已匹配的蓝牙
that.bluetooth_list()//每次搜索都把之前的清空
that.bArray=[];
that.no_match_list=[];var filter = newIntentFilter();var BDevice = newBluetoothDevice();
BAdapter.startDiscovery();//开启搜索
var receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
onReceive: function(context, intent) {//回调
try{
plus.android.importClass(intent);//通过intent实例引入intent类
if(intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED") {
uni.hideLoading()
main.unregisterReceiver(receiver);//取消监听
} else{//从Intent中获取设备对象
BDevice=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);//配对蓝牙
if (address ==BDevice.getAddress()) {if (BDevice.createBond()) { //配对命令.createBond()
console.log("配对成功");
uni.hideLoading()
}
}if(BDevice == null) {
main.unregisterReceiver(receiver);//取消监听
uni.hideLoading()//获取已匹配的蓝牙
that.bluetooth_list()return;
}var name=BDevice.getAddress()+BDevice.getName();if(that.bArray.indexOf(name) == -1){ //去重
that.bArray.push(name);//用于去重的
let arr={"name": BDevice.getName(),"SN": BDevice.getAddress()
}
that.no_match_list.push(arr)
console.log(JSON.stringify(that.no_match_list))
}
}
}catch(e) {
console.error(e);
}
}
});
filter.addAction(BDevice.ACTION_FOUND);
filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BAdapter.ACTION_STATE_CHANGED);
main.registerReceiver(receiver, filter);//注册监听
},
}
}