2012-12-26 10 views
5

Android üzerinden Mac OS X'e android istemcisinden mesaj göndermeye çalışıyorum. Mac OS X Snow Leopard'da bluecove 2.0.1 Java bluetooth kütüphanesi kullanıyorum. Serverandroid üzerindeki bluetooth soketine bağlanamıyor

Kodu:

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

} 

}

Kod Android istemcisi için:

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

} 

}

ben UUID olmasına rağmen sunucuya bağlanabiliyor değilim İstemci ve sunucu için aynı. Android bir istisna atar: Hizmet Bulma başarısız oldu. Ancak, sunucudaki uzak aygıtın (istemci) adını yazdıramıyorum. Dolayısıyla acceptAndOpen() soket bağlantısını kabul edemiyor.

Lütfen neden clientSocket.connect(); Android'de mi?

+0

Bunu çözmeyi başardınız mı? Tam olarak aynı problemi yaşıyorum ve işe yaramış gibi görünmüyorum. – blastervla

cevap

1

Bir tahminde bulunacağım ve kullandığınız UUID numaralarıyla bir ilgisi olduğunu söyleyeceğim. Sadece kullandığınız cihazın türüne göre değişir. Bu yüzden onlara baktığınızdan ve android cihaz için doğru olduklarından emin olun. Ben android yaparken bu beni uzun zamandır şaşırttı. UUID, ayarladığınız bir şey değil. O Değilse İşte bir bağlantı How can I get the UUID of my Android phone in an application? Ya da bu Android - Get Bluetooth UUID for this device

olduğunu. Keşif her iki uçta da başarısız oldu mu? Cihazı iki ucundan görebilir misin? İsmi hangi tarafa yazdırabilirsin? Google'ın bluetooth örnek programına bir göz atmak isteyebilirsiniz. Ve bunu başlatmak için kullan.