Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Problems connecting with bluetooth Android

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("\nNome:"+bluetooth.getName());
  tela.append("\nEndereç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("\nModo 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("\nDispositivos 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("\n"+nomeDevice+"\n"+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("\nDispositivos pareados mas não conectados");
  Set<BluetoothDevice> devices = bluetooth.getBondedDevices();
  for(BluetoothDevice device : devices){
   tela.append("\n"+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());
  }
 }
}
like image 584
user476378 Avatar asked Dec 14 '10 21:12

user476378


People also ask

Why is my Android phone not connecting to Bluetooth?

If your Bluetooth devices won't connect, it's likely because the devices are out of range, or aren't in pairing mode. If you're having persistent Bluetooth connection problems, try resetting your devices, or having your phone or tablet "forget" the connection.

Why is my phone Bluetooth not connecting?

It's usually because the device's own Bluetooth is switched off, or isn't in pairing mode. Check the user manual to find out how to make it discoverable by turning on pairing mode. With some headphones, it's a case of holding the power button down for longer, but with other devices there's a dedicated Bluetooth button.


1 Answers

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)); 

This is taken from the following question: Disconnect a bluetooth socket in Android

Regards, Michael

like image 187
michael Avatar answered Sep 29 '22 02:09

michael