返回信息流想从一个体检设备中读取数据 连接的时候出现的问题
估计是咋回事
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #13266同步于 2014/4/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖
有做蓝牙的么,来看个问题
icyfox
2014/4/16镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不知道你解决了没
1、看看你UUID是不是按需分配的:比较常用的模式private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
2、我之前用这个能够正常连接 tmp=mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME, MY_UUID);
用安全模式反而不行// tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
3、在连接线程下
tmp = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
//20131113createRf..修改为createInsecureRf..排除 java.io.IOException: Connection refused 的异常
4、如果还不行那就看看clientsocket.connect()方法和serversocket.accept()是不是有问题
android小菜 。。会的都说了。。
谢回复
1、2点目前都是这样的
3、我试试看,这个错误的原因是什么
4、我直接是当客户端用的,因为对方无法连接过来(是一个非智能的设备)
【 在 acofy (acofy) 的大作中提到: 】
: 不知道你解决了没
: 1、看看你UUID是不是按需分配的:比较常用的模式private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
: 2、我之前用这个能够正常连接 tmp=mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME, MY_UUID);
: ...................
可能是sdk版本的关系吧,别人博客给出这样的讨论,你可以验证看看
sdk 2.3以上的用createRfcommSocketToServiceRecord方法连接不上,须采用createInsecureRfcommSocketToServiceRecord方法(此方法需sdk2.3以上才有)。
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
int sdk = Integer.parseInt(Build.VERSION.SDK);
if (sdk >= 10) {
btSocket = btDev.createInsecureRfcommSocketToServiceRecord(uuid);
} else {
btSocket = btDev.createRfcommSocketToServiceRecord(uuid);
}
突然发现个问题
我以为想连蓝牙设备一定要配对的
现在发现好像不配对也可以直接 用?
【 在 acofy (acofy) 的大作中提到: 】
: 可能是sdk版本的关系吧,别人博客给出这样的讨论,你可以验证看看
: sdk 2.3以上的用createRfcommSocketToServiceRecord方法连接不上,须采用createInsecureRfcommSocketToServiceRecord方法(此方法需sdk2.3以上才有)。
: UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
: ...................
以前做的是用HC 系列的蓝牙模块与手机通信,这种情况下不用配对也能用的
【 在 icyfox (熊爸) 的大作中提到: 】
: 突然发现个问题
: 我以为想连蓝牙设备一定要配对的
: 现在发现好像不配对也可以直接 用?
通过『我邮2.0』发布
你要是在北邮就好了 想当面问问你问题
【 在 acofy (acofy) 的大作中提到: 】
: 以前做的是用HC 系列的蓝牙模块与手机通信,这种情况下不用配对也能用的
: 【 在 icyfox (熊爸) 的大作中提到: 】
: 通过『我邮2.0』发布
: ...................
给你看个代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onDestroy() {
super.onDestroy();
if (BTReceiver != null)
getActivity().unregisterReceiver(BTReceiver);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fv = inflater.inflate(R.layout.fragment_bloodpressure, container, false);
ButterKnife.inject(this , fv);
mBtnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_device:
ivCircle.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.rotate));
startBlueTooth();
break;
case R.id.btn_hand:
Intent it = new Intent(getActivity(), BloodPresureInputActivity.class);
startActivity(it);
break;
default:
break;
}
}
};
btnDevice.setOnClickListener(mBtnClickListener);
btnHand.setOnClickListener(mBtnClickListener);
initData();
return fv;
}
@SuppressLint("HandlerLeak")
private void initData(){
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case -1:
tvNum.setText("连接失败");
ivCircle.clearAnimation();
break;
case 100:
tvNum.setText("读取数据");
tvTip.setVisibility(View.VISIBLE);
break;
case 101:
tvNum.setText((String)msg.obj);
break;
case 102:
tvNum.setText(msg.arg1+"");
break;
case 103:
String datas = (String)msg.obj;
String[] data = datas.split("-");
String HP = Integer.parseInt(data[0], 16) + "";//高压
String LP = Integer.parseInt(data[1], 16) + "";//低压
String HR = Integer.parseInt(data[2], 16) + "";//心率
tvNum.setText(HP + "/" + LP);
tvHeartRate.setText(HR);
tvTip.setText("高压/低压");
break;
default:
break;
}
super.handleMessage(msg);
}
};
}
private void startBlueTooth(){
adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null)
{
// 设备不支持蓝牙
}
// 打开蓝牙
if (!adapter.isEnabled())
{
adapter.enable();
}
// 设置广播信息过滤
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
// 注册广播接收器,接收并处理搜索结果
if (BTReceiver == null)
BTReceiver = new BlueToothReceiver();
getActivity().registerReceiver(BTReceiver, intentFilter);
// 寻找蓝牙设备,android会将查找到的设备以广播形式发出去
adapter.startDiscovery();
tvNum.setText("开始搜索");
}
public class BlueToothReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i("BlueTooth", action);
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
final BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.e("BlueTooth", device.getName() + " " + device.getAddress()
+ " " + device.getBluetoothClass());
if (device.getBluetoothClass().toString()
.equalsIgnoreCase("5a0204")) {
// 搜索蓝牙设备的过程占用资源比较多,一旦找到需要连接的设备后需要及时关闭搜索
// 血糖仪的名称为TZ100 血压计的名称为H121 新血压计名称为YMETECH
tvNum.setText("连接设备");
new Thread(new Runnable() {
@Override
public void run() {
try {
connect(device);
} catch (IOException e) {
e.printStackTrace();
mHandler.obtainMessage(-1);
}
}
}).start();
// break;
// }
} else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED
.equals(action)) {
}
}
}
}