2012-12-26 22 views
5

Sto provando a inviare messaggi dal client Android a Mac OS X tramite Bluetooth. Sto usando bluecove 2.0.1 libreria Java Bluetooth su Mac OS X Snow Leopard.impossibile connettersi alla presa bluetooth su Android

Codice per server:

public class EchoServer2 { 
private static final String UUID_STRING = "00001101-0000-1000-8000-00805F9B34FB"; // 32 hex digits 
private static final String SERVICE_NAME = "echoserver"; 

private LocalDevice mLocalDevice; 

public EchoServer2() { 
    try { 
     mLocalDevice = LocalDevice.getLocalDevice(); 
    } catch(IOException e) { 
     System.err.print("Error connection to bluetooth"); 
    } 
} 

public void start() throws IOException { 
    StreamConnectionNotifier connectionNotifier = 
     (StreamConnectionNotifier) Connector.open(
       "btspp://localhost:" + UUID_STRING + 
       ";name=" + SERVICE_NAME + ";authenticate=false"); 

    System.out.println("Bluetooth Address: " + mLocalDevice.getBluetoothAddress()); 

    System.out.println("Waiting for a connection..."); 
    StreamConnection streamConnection = connectionNotifier.acceptAndOpen(); 

    System.out.println("Found a new device."); 

    RemoteDevice device = RemoteDevice.getRemoteDevice(streamConnection); 
    System.out.println("New Device connected: " + device.getFriendlyName(false).toString()); 

    DataInputStream is = streamConnection.openDataInputStream(); 

    byte[] bytes = new byte[1024]; 
    int r; 
    while((r = is.read(bytes)) > 0) { 
     System.out.println(new String(bytes, 0, r)); 
    } 

} 

}

codice per il client Android:

public class MainActivity extends Activity { 

private static final String TAG = "MainActivity"; 

EditText editText; 
TextView textView; 

String send_msg; 
String rcv_msg; 

private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // 32 hex digits 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Log.d(TAG, "onCreate"); 

    editText = (EditText) findViewById(R.id.edit_msg); 
    textView = (TextView) findViewById(R.id.rcv_msg); 

    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); 

    if(adapter == null) { 
     textView.append("Bluetooth NOT Supported!"); 
     return; 
    } 

    // Request user to turn ON Bluetooth 
    if(!adapter.isEnabled()) { 
     Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
     startActivityForResult(intent, RESULT_OK); 
    } 




} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

public void onClick(View view) { 
    Log.d(TAG, "onClick"); 
    new SendMessageToServer().execute(send_msg); 
} 

private class SendMessageToServer extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... msg) { 
     Log.d(TAG, "doInBackground"); 

     BluetoothSocket clientSocket = null; 
     BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

     mBluetoothAdapter.enable(); 
     // Client knows the server MAC address 
     BluetoothDevice mmDevice = mBluetoothAdapter.getRemoteDevice("00:25:00:C3:1C:FE"); 
     Log.d(TAG, "got hold of remote device"); 
     Log.d(TAG, "remote device: " + mmDevice.getName().toString()); 

     try { 
      // UUID string same used by server 
      clientSocket = mmDevice.createInsecureRfcommSocketToServiceRecord(MY_UUID); 

      Log.d(TAG, "bluetooth socket created"); 

      mBluetoothAdapter.cancelDiscovery(); // Cancel, discovery slows connection 

      clientSocket.connect(); 
      Log.d(TAG, "connected to server"); 

      DataInputStream in = new DataInputStream(clientSocket.getInputStream()); 
      DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()); 

      out.writeUTF(msg[0]);   // Send message to server 
      Log.d(TAG, "Message Successfully sent to server"); 
      return in.readUTF();   // Read response from server 
     } catch (Exception e) { 

      Log.d(TAG, "Error creating bluetooth socket"); 
      Log.d(TAG, e.getMessage()); 

      return ""; 
     } 

    } 

    @Override 
    protected void onPostExecute(String result) { 
     Log.d(TAG, "onPostExecute"); 
     rcv_msg = result; 
     textView.setText(rcv_msg); 
    } 

} 

}

io non sono in grado di connettersi al server anche se la UUID sono lo stesso sia per client e server. Android genera un'eccezione: l'individuazione del servizio non è riuscita. Tuttavia, sono in grado di stampare il nome del dispositivo remoto (client) sul server. Quindi acceptAndOpen() non è in grado di accettare la connessione socket.

Per favore aiutami a capire perché non riesco a clientSocket.connect(); su Android?

+0

Sei riuscito a risolvere questo? Sto avendo lo stesso identico problema e non riesco a farlo funzionare. – blastervla

risposta

1

Sto per fare una supposizione e dire che ha qualcosa a che fare con i numeri UUID che hai usato. Dipendono esclusivamente dal tipo di dispositivo che utilizzi. Quindi assicurati di guardarli e che siano corretti per il dispositivo Android. Quando stavo facendo android questo mi ha lasciato a lungo per un lungo periodo. UUID non è qualcosa che si imposta. Ecco un link How can I get the UUID of my Android phone in an application? O questo Android - Get Bluetooth UUID for this device

Se questo non è vero. La scoperta ha avuto esito negativo ad entrambe le estremità? riesci a vedere il dispositivo su entrambe le estremità? Da che parte puoi stampare il nome? Si potrebbe voler dare un'occhiata al programma di esempio bluetooth di google. E usalo per iniziare.

Problemi correlati