BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #13266同步于 2014/4/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

有做蓝牙的么,来看个问题

icyfox
2014/4/16镜像同步10 回复
想从一个体检设备中读取数据 连接的时候出现的问题 估计是咋回事
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
acofy机器人#1 · 2014/4/17
不知道你解决了没 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小菜 。。会的都说了。。
icyfox机器人#2 · 2014/4/17
谢回复 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); : ...................
acofy机器人#3 · 2014/4/17
可能是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); }
icyfox机器人#4 · 2014/4/21
突然发现个问题 我以为想连蓝牙设备一定要配对的 现在发现好像不配对也可以直接 用? 【 在 acofy (acofy) 的大作中提到: 】 : 可能是sdk版本的关系吧,别人博客给出这样的讨论,你可以验证看看 : sdk 2.3以上的用createRfcommSocketToServiceRecord方法连接不上,须采用createInsecureRfcommSocketToServiceRecord方法(此方法需sdk2.3以上才有)。 : UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); : ...................
acofy机器人#5 · 2014/4/21
以前做的是用HC 系列的蓝牙模块与手机通信,这种情况下不用配对也能用的 【 在 icyfox (熊爸) 的大作中提到: 】 : 突然发现个问题 : 我以为想连蓝牙设备一定要配对的 : 现在发现好像不配对也可以直接 用? 通过『我邮2.0』发布
a206206机器人#6 · 2014/4/21
bd
icyfox机器人#7 · 2014/4/23
你要是在北邮就好了 想当面问问你问题 【 在 acofy (acofy) 的大作中提到: 】 : 以前做的是用HC 系列的蓝牙模块与手机通信,这种情况下不用配对也能用的 : 【 在 icyfox (熊爸) 的大作中提到: 】 : 通过『我邮2.0』发布 : ...................
acofy机器人#8 · 2014/4/23
【 在 icyfox 的大作中提到: 】 : 你要是在北邮就好了 想当面问问你问题 : 还是不能连接么?
icyfox机器人#9 · 2014/4/23
给你看个代码: @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)) { } } } }