|
|
@ -1,257 +0,0 @@
|
|
|
|
//address=""搜索蓝牙//address=设备mac地址,自动配对给出mac地址的设备 安卓
|
|
|
|
|
|
|
|
var BleDevice
|
|
|
|
|
|
|
|
var device = null,
|
|
|
|
|
|
|
|
BAdapter = null,
|
|
|
|
|
|
|
|
BluetoothAdapter = null,
|
|
|
|
|
|
|
|
uuid = null,
|
|
|
|
|
|
|
|
main = null,
|
|
|
|
|
|
|
|
UUID = null,
|
|
|
|
|
|
|
|
bluetoothSocket = null,
|
|
|
|
|
|
|
|
num = 0;
|
|
|
|
|
|
|
|
// 开始gps定位
|
|
|
|
|
|
|
|
function getLocationManager(callback) {
|
|
|
|
|
|
|
|
plus.android.requestPermissions(
|
|
|
|
|
|
|
|
['android.permission.ACCESS_FINE_LOCATION'],
|
|
|
|
|
|
|
|
function (resultObj) {
|
|
|
|
|
|
|
|
var result = 0;
|
|
|
|
|
|
|
|
for (var i = 0; i < resultObj.granted.length; i++) {
|
|
|
|
|
|
|
|
var grantedPermission = resultObj.granted[i]; // 以获取的权限
|
|
|
|
|
|
|
|
result = 1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
|
|
|
|
|
|
|
|
var deniedPresentPermission = resultObj.deniedPresent[i]; // 拒绝本次申请的权限
|
|
|
|
|
|
|
|
num += 1;
|
|
|
|
|
|
|
|
result = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
|
|
|
|
|
|
|
|
var deniedAlwaysPermission = resultObj.deniedAlways[i]; // 永久拒绝的权限
|
|
|
|
|
|
|
|
num += 1;
|
|
|
|
|
|
|
|
result = -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 权限被拒绝,则打开app 设置界面,可以再app设置界面打开相应权限
|
|
|
|
|
|
|
|
if (result !== 1) {
|
|
|
|
|
|
|
|
const Intent = plus.android.importClass("android.content.Intent");
|
|
|
|
|
|
|
|
const Settings = plus.android.importClass("android.provider.Settings");
|
|
|
|
|
|
|
|
const Uri = plus.android.importClass("android.net.Uri");
|
|
|
|
|
|
|
|
var mainActivity=plus.android.runtimeMainActivity();
|
|
|
|
|
|
|
|
const intent = new Intent();
|
|
|
|
|
|
|
|
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
|
|
|
|
|
|
|
var uri = Uri.fromParts("package",mainActivity.getPackageName(),null);
|
|
|
|
|
|
|
|
intent.setData(uri);
|
|
|
|
|
|
|
|
mainActivity.startActivity(intent);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 因为安卓手机,授权之后还需要打开定位服务功能 当手机授权之后 调用下面的方法
|
|
|
|
|
|
|
|
var context = plus.android.importClass("android.content.Context");
|
|
|
|
|
|
|
|
var locationManager=plus.android.importClass("android.location.LocationManager");
|
|
|
|
|
|
|
|
var main=plus.android.runtimeMainActivity();
|
|
|
|
|
|
|
|
var mainSvr=main.getSystemService(context.LOCATION_SERVICE);
|
|
|
|
|
|
|
|
var gps = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
|
|
|
|
|
|
|
|
var agps = mainSvr.isProviderEnabled(locationManager.NETWORK_PROVIDER);
|
|
|
|
|
|
|
|
// 只有两个:gps开关和agps开关都是关的情况才算关,有一个开就认为是开
|
|
|
|
|
|
|
|
if (gps || agps) {
|
|
|
|
|
|
|
|
startBluetoothDiscovery(callback); // 目前发现 荣耀需要弹框允许蓝牙权限 否则无法搜索即使打开蓝牙也没用
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
uni.showModal({
|
|
|
|
|
|
|
|
title: "提示",
|
|
|
|
|
|
|
|
content: "请授权位置获取附近的蓝牙设备",
|
|
|
|
|
|
|
|
showCancel: false,
|
|
|
|
|
|
|
|
success(){
|
|
|
|
|
|
|
|
if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
|
|
|
|
|
|
|
|
var Intent = plus.android.importClass("android.content.Intent");
|
|
|
|
|
|
|
|
var Settings = plus.android.importClass("android.provider.Settings");
|
|
|
|
|
|
|
|
var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
|
|
|
|
|
|
|
|
main.startActivity(intent); // 打开系统设置gps服务页面
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
startBluetoothDiscovery(callback); // 目前发现 荣耀需要弹框允许蓝牙权限 否则无法搜索即使打开蓝牙也没用
|
|
|
|
|
|
|
|
console.log('定位已开启')
|
|
|
|
|
|
|
|
// uni.showToast({
|
|
|
|
|
|
|
|
// title: '定位已开启',
|
|
|
|
|
|
|
|
// duration: 2000,
|
|
|
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function startBluetoothDiscovery(callback){
|
|
|
|
|
|
|
|
plus.bluetooth.openBluetoothAdapter({
|
|
|
|
|
|
|
|
success:function(e){
|
|
|
|
|
|
|
|
plus.bluetooth.startBluetoothDevicesDiscovery({
|
|
|
|
|
|
|
|
success:function(e){callback()},
|
|
|
|
|
|
|
|
fail:function(e){console.log('失败2')}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
fail:function(e){
|
|
|
|
|
|
|
|
console.log('open failed: '+JSON.stringify(e));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 搜索设备
|
|
|
|
|
|
|
|
function searchDevices(address= '',vlist1 = [],vlist2= []) {
|
|
|
|
|
|
|
|
//注册类
|
|
|
|
|
|
|
|
var main = plus.android.runtimeMainActivity();
|
|
|
|
|
|
|
|
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
|
|
|
|
|
|
|
|
var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
|
|
|
|
|
|
|
|
var BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice");
|
|
|
|
|
|
|
|
BAdapter = BluetoothAdapter.getDefaultAdapter();
|
|
|
|
|
|
|
|
// 没有开启蓝牙
|
|
|
|
|
|
|
|
if (!BAdapter.isEnabled()) {
|
|
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
|
|
title: '请开启蓝牙',
|
|
|
|
|
|
|
|
duration: 2000,
|
|
|
|
|
|
|
|
icon:'error'
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log("开始搜索设备");
|
|
|
|
|
|
|
|
var filter = new IntentFilter();
|
|
|
|
|
|
|
|
var bdevice = new BluetoothDevice();
|
|
|
|
|
|
|
|
var on = null;
|
|
|
|
|
|
|
|
var un = null;
|
|
|
|
|
|
|
|
let titleStr = '正在搜索请稍候';
|
|
|
|
|
|
|
|
if (address) {
|
|
|
|
|
|
|
|
titleStr = '正在连接蓝牙';
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
uni.showLoading({
|
|
|
|
|
|
|
|
title: titleStr,
|
|
|
|
|
|
|
|
success:()=>{
|
|
|
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
|
|
|
},5000);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
BAdapter.startDiscovery(); //开启搜索
|
|
|
|
|
|
|
|
var receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
|
|
|
|
|
|
|
|
onReceive: function(context, intent) { //实现onReceiver回调函数
|
|
|
|
|
|
|
|
plus.android.importClass(context);
|
|
|
|
|
|
|
|
plus.android.importClass(intent); //通过intent实例引入intent类,方便以后的‘.’操作
|
|
|
|
|
|
|
|
if(intent.getAction() === "android.bluetooth.adapter.action.DISCOVERY_FINISHED"){
|
|
|
|
|
|
|
|
main.unregisterReceiver(receiver);//取消监听
|
|
|
|
|
|
|
|
uni.hideLoading(); // 默认12秒
|
|
|
|
|
|
|
|
// console.log("搜索结束")
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
|
|
|
|
|
|
|
|
const name = BleDevice.getName();
|
|
|
|
|
|
|
|
//判断是否配对
|
|
|
|
|
|
|
|
if (BleDevice.getBondState() === bdevice.BOND_NONE) {
|
|
|
|
|
|
|
|
//参数如果跟取得的mac地址一样就配对
|
|
|
|
|
|
|
|
if (address === BleDevice.getAddress()) {
|
|
|
|
|
|
|
|
if (BleDevice.createBond()) { //配对命令.createBond()
|
|
|
|
|
|
|
|
vlist2.push({name,address:BleDevice.getAddress()});
|
|
|
|
|
|
|
|
BAdapter.cancelDiscovery();//取消扫描
|
|
|
|
|
|
|
|
// main.unregisterReceiver(receiver);//取消监听
|
|
|
|
|
|
|
|
// uni.hideLoading(); //
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if(name !== null && name !== on ){ //判断防止重复添加
|
|
|
|
|
|
|
|
on = name || '未知设备';
|
|
|
|
|
|
|
|
vlist1.push({name:on,address:BleDevice.getAddress()})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if(name !== un ){ //判断防止重复添加
|
|
|
|
|
|
|
|
un = name;
|
|
|
|
|
|
|
|
vlist1.push({name:un,address:BleDevice.getAddress()});
|
|
|
|
|
|
|
|
vlist2.push({name:un,address:BleDevice.getAddress()});
|
|
|
|
|
|
|
|
if (address) {
|
|
|
|
|
|
|
|
BAdapter.cancelDiscovery();//取消扫描
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
filter.addAction(bdevice.ACTION_FOUND);
|
|
|
|
|
|
|
|
filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED);
|
|
|
|
|
|
|
|
filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);
|
|
|
|
|
|
|
|
filter.addAction(BAdapter.ACTION_STATE_CHANGED);
|
|
|
|
|
|
|
|
filter.addAction(BluetoothAdapter.ACTION_ACL_DISCONNECTED);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
main.registerReceiver(receiver, filter); //注册监听
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//开始连接打印
|
|
|
|
|
|
|
|
function print(mac_address,data,callback) {
|
|
|
|
|
|
|
|
if (!mac_address) {
|
|
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
|
|
title: '请选择蓝牙设备',
|
|
|
|
|
|
|
|
duration: 2000,
|
|
|
|
|
|
|
|
icon:'error'
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
main = plus.android.runtimeMainActivity();
|
|
|
|
|
|
|
|
BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");
|
|
|
|
|
|
|
|
UUID = plus.android.importClass("java.util.UUID");
|
|
|
|
|
|
|
|
uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
|
|
|
|
|
|
|
|
BAdapter = BluetoothAdapter.getDefaultAdapter();
|
|
|
|
|
|
|
|
device = BAdapter.getRemoteDevice(mac_address);
|
|
|
|
|
|
|
|
plus.android.importClass(device);
|
|
|
|
|
|
|
|
bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);
|
|
|
|
|
|
|
|
plus.android.importClass(bluetoothSocket);
|
|
|
|
|
|
|
|
// const isConnected = bluetoothSocket.isConnected();
|
|
|
|
|
|
|
|
// console.log('设备是否连接,',bluetoothSocket.isConnected());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!bluetoothSocket.isConnected()) {
|
|
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
|
|
title: '检测到设备未连接,尝试连接....',
|
|
|
|
|
|
|
|
duration: 2000,
|
|
|
|
|
|
|
|
icon:'none'
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
bluetoothSocket.connect();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (bluetoothSocket.isConnected()) {
|
|
|
|
|
|
|
|
const outputStream = bluetoothSocket.getOutputStream();
|
|
|
|
|
|
|
|
plus.android.importClass(outputStream);
|
|
|
|
|
|
|
|
// string 直接传输指令就行 哪个打印机需要的指令就传哪个指令 例子(tSPL):
|
|
|
|
|
|
|
|
// 宽: X800(100mm) 点,高:Y800(100mm)
|
|
|
|
|
|
|
|
// const string2 = `
|
|
|
|
|
|
|
|
// SIZE 100mm, 100mm
|
|
|
|
|
|
|
|
// GAP 3mm, 0mm
|
|
|
|
|
|
|
|
// DIRECTION 1
|
|
|
|
|
|
|
|
// CLS
|
|
|
|
|
|
|
|
// TEXT 291,0,"TSS24.BF2",0,1,1,"货号:0075 0075瑜伽体力库"
|
|
|
|
|
|
|
|
// TEXT 291,40,"TSS24.BF2",0,1,1,"日期:06/30 裁剪:裁剪人"
|
|
|
|
|
|
|
|
// TEXT 291,80,"TSS24.BF2",0,1,1,"编号:952 包号:1"
|
|
|
|
|
|
|
|
// TEXT 291,120,"TSS24.BF2",0,1,1,"床号:91 颜色:白色"
|
|
|
|
|
|
|
|
// TEXT 291,160,"TSS24.BF2",0,1,1,"尺码:S 数量:100"
|
|
|
|
|
|
|
|
// QRCODE 391,200,H,10,A,0,"无效数据-guid"
|
|
|
|
|
|
|
|
// PRINT 1
|
|
|
|
|
|
|
|
// `;
|
|
|
|
|
|
|
|
data.forEach(item=>{
|
|
|
|
|
|
|
|
const bytes = plus.android.invoke(item, 'getBytes', 'gbk');
|
|
|
|
|
|
|
|
outputStream.write(bytes);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
|
|
|
outputStream.flush();// 强制把缓冲区内容输出
|
|
|
|
|
|
|
|
device = null //这里关键
|
|
|
|
|
|
|
|
// outputStream.clone(); // 关闭输出流
|
|
|
|
|
|
|
|
bluetoothSocket.close(); //必须关闭蓝牙连接否则意外断开的话打印错误
|
|
|
|
|
|
|
|
callback();
|
|
|
|
|
|
|
|
},500)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 关闭操作
|
|
|
|
|
|
|
|
function cancelDiscovery() {
|
|
|
|
|
|
|
|
if (BAdapter) {
|
|
|
|
|
|
|
|
BAdapter.cancelDiscovery();//取消扫描
|
|
|
|
|
|
|
|
if (bluetoothSocket) {
|
|
|
|
|
|
|
|
bluetoothSocket.close(); //关闭蓝牙连接
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export {searchDevices,print,getLocationManager,cancelDiscovery}
|
|
|
|
|