不期而遇123 2019-09-17 13:02 采纳率: 0%
浏览 563

安卓与蓝牙通讯socket连接不上

可以搜索并扫描设备但无法连接到设备并获取socket,不知道哪里的问题,求大神指点。
以下为部分代码:
寻找设备部分:

private BroadcastReceiver mReceiver = new BroadcastReceiver()
    {         
        @Override
        public void onReceive(Context context, Intent intent)
        {             
            String action = intent.getAction();//服务发现远程设备时
            String str = "";
            if(BluetoothDevice.ACTION_FOUND.equals(action))//每扫描到一个设备,系统都会发送此广播
            {
                //从Intent中获取device信息
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);//获取搜索到的设备信息

                str = device.getName()+ ":" + device.getAddress() + "\n";

                //当发现的新设备不存在于设备配对列表中时,将设备的名字和地址添加到ArrayAdapter中
                if(listDevices.indexOf(str) == -1)//防止重复添加
                {
                    listDevices.add(str);//添加搜索到的设备信息
                    deviceAdapter.notifyDataSetChanged();
                }
            }
            else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))
            {
                Toast.makeText(WindFireDemoActivity.this, "Discovery finished", Toast.LENGTH_SHORT).show();
            }
        }
    };

listview点击事件:

text.setOnItemClickListener( new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> adapterview, View view, int position,long id) 
            {
                // TODO Auto-generated method stub
                    //绑定所选择的蓝牙MAC地址设备
                    String str = deviceAdapter.getItem(position);
                    if(null == str)
                    {
                        Toast.makeText(getApplicationContext(), "未选中设备", Toast.LENGTH_SHORT).show();
                    }
                    String mac = str.substring(str.indexOf(":")+1).trim();//str.substring(str.indexOf(":")+1)取名称
                    device = mBluetoothAdapter.getRemoteDevice(mac);//以mac去创建一个device

                    new Thread(new ConnectThread()).start();
                    Toast.makeText(getApplicationContext(), "连接到所选设备", Toast.LENGTH_SHORT).show();
            }
        });

连接socket部分:

public class ConnectThread extends Thread {
        public void run()
        {
            try{
                if(mBluetoothAdapter.isDiscovering()){
                    mBluetoothAdapter.cancelDiscovery();
                }
                btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
                Toast.makeText(WindFireDemoActivity.this, "已退出搜索,连接Socket", Toast.LENGTH_SHORT).show();
                btSocket.connect();
                isConnected = true;//判断语句
                Toast.makeText(WindFireDemoActivity.this, "sssssssss", Toast.LENGTH_SHORT).show();
            }
            catch(IOException e){
                e.printStackTrace();
                Method m;
                try {
                    m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
                    btSocket = (BluetoothSocket) m.invoke(device, 1);
                    btSocket.connect();
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                    try{
                        btSocket.close();
                    }catch (IOException ie){
                        Toast.makeText(WindFireDemoActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        }
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2019-10-04 08:33
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!