我试图在里程碑和个人电脑之间打开插座蓝牙,但设备无法连接.我希望我发送代码帮助.
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()); } } }
解决方法
在Android 2.1 / 2.2中,createRFcommSocketToServiceRecord方法不起作用.
调用非公开方法来创建套接字有一个解决方法:
调用非公开方法来创建套接字有一个解决方法:
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));
这取决于以下问题:
Disconnect a bluetooth socket in Android
问候,迈克尔