java 蓝牙指定连接失败_vue app混合开发蓝牙串口连接(报错java.io.IOException: read failed, socket migh ...

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:30   1348   0

我使用的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);//注册监听

},

}

}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP