连接蓝牙Android的问题 [英] Problems connecting with bluetooth Android

查看:14
本文介绍了连接蓝牙Android的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在里程碑和 PC 之间打开套接字蓝牙,但设备无法连接.我希望我发送代码帮助.

I'm trying to open a socket bluetooth between a milestone and a pc but the device can not connect. I hope I am sending the code help.

public class Bluetooth_V2 extends Activity {
 public TextView tela;
 public ListView telaDevice;
 public BluetoothAdapter bluetooth;
 public String endBluetooth;
 public String endDevice;
 public String nomeDevice;
 public ArrayAdapter<String> nomeBluetooth;
 private static final String info = "DEBUG";
 private static final int DISCOVERABLE_REQUEST = 0;
 private static final int DISCOVERY_REQUEST = 0;
 public BroadcastReceiver mReceiver = null;
 public ArrayList<String> deviceDescoberto;
 public BluetoothDevice deviceRemoto;
 public BluetoothServerSocket btserver;
 public BluetoothSocket serverSocket;
 public UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
 public OutputStream outStream;
 public InputStream instream;
 public BluetoothSocket socket;

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  tela = (TextView) findViewById(R.id.telaMsg);
  telaDevice = (ListView) findViewById(R.id.telaDevice);

  bluetooth = BluetoothAdapter.getDefaultAdapter();

  nomeBluetooth = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
  telaDevice.setAdapter(nomeBluetooth);

  Log.d(info, "Recebeu adaptador");

  if(bluetooth==null)
  {
   Log.d(info,"Bluetooth nao suportado");
   tela.append("Bluetooth nao suportado");
  }

  if(!bluetooth.isEnabled())
  {
   Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
   startActivityForResult(enableBtIntent,RESULT_OK);
  }

  tela.append("
Nome:"+bluetooth.getName());
  tela.append("
Endereço:"+bluetooth.getAddress());

  bluetooth.startDiscovery();
  Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
  startActivity(discoverableIntent);
  //discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
  bluetooth.isDiscovering();

  Log.d(info,"Estado de descoberta");

  IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
  this.registerReceiver(mReceiver, filter);

  tela.append("
Modo de busca" + bluetooth.getScanMode());

  filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
  this.registerReceiver(mReceiver, filter);

  //startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE),DISCOVERABLE_REQUEST);

  tela.append("
Dispositivos encontrados:"); 
  BroadcastReceiver discoveryResult = new BroadcastReceiver() {

   public void onReceive(Context context, Intent intent) {
    nomeDevice = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
    deviceRemoto = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    tela.append("
"+nomeDevice+"
"+deviceRemoto);
    // TODO Do something with the remote Bluetooth Device.
   }
  };
  registerReceiver(discoveryResult,
    new IntentFilter(BluetoothDevice.ACTION_FOUND));
  if (!bluetooth.isDiscovering())
   bluetooth.startDiscovery();

  /* //Mostra dispositivos pareados
  tela.append("
Dispositivos pareados mas não conectados");
  Set<BluetoothDevice> devices = bluetooth.getBondedDevices();
  for(BluetoothDevice device : devices){
   tela.append("
"+device.getName());
  }*/

  startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE),DISCOVERY_REQUEST);
  final BluetoothDevice device = bluetooth.getRemoteDevice("90:4C:E5:FA:01:22");
  final Set<BluetoothDevice> bondedDevices = bluetooth.getBondedDevices();
  BroadcastReceiver Result = new BroadcastReceiver(){
   @Override
   public void onReceive(Context context, Intent intent) {
    deviceRemoto = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    if(deviceRemoto.equals(device)&&bondedDevices.contains(deviceRemoto)){
     tela.append("Dispositivos"+deviceRemoto.getName()+" ja está pareado");
    }
   }
  };
  registerReceiver(Result, new IntentFilter(BluetoothDevice.ACTION_FOUND));

   try{
   deviceRemoto = bluetooth.getRemoteDevice("90:4C:E5:FA:01:22");

   BluetoothSocket clientSocket =
    device.createRfcommSocketToServiceRecord(uuid);
   clientSocket.connect();
   Log.d(info,"Cliente Conectado");
   //sendMessage("OI");
   // TODO Transfer data using the Bluetooth Socket
  } catch (IOException e) {
   Log.d("BLUETOOTH CLIENTE", e.getMessage());
  }
 }
}

推荐答案

createRFcommSocketToServiceRecord 方法在 Android 2.1/2.2 中不起作用.有一种解决方法可以调用非公共方法来创建套接字:

The createRFcommSocketToServiceRecord method is not working in Android 2.1/2.2. There is a workaround to call a non-public method to create the socket:

BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(device.getAddress());
Method m;
m = hxm.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
socket = (BluetoothSocket)m.invoke(hxm, Integer.valueOf(1)); 

这取自以下问题:断开 Android 中的蓝牙插座

问候,迈克尔

这篇关于连接蓝牙Android的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆