2012-12-26 18 views
5

मैं ब्लूटूथ पर एंड्रॉइड क्लाइंट से मैक ओएस एक्स में संदेश भेजने की कोशिश कर रहा हूं। मै मैक ओएस एक्स हिम तेंदुए पर ब्लूकोव 2.0.1 जावा ब्लूटूथ लाइब्रेरी का उपयोग कर रहा हूं। सर्वर के लिएएंड्रॉइड पर ब्लूटूथ सॉकेट से कनेक्ट करने में असमर्थ

कोड:

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

} 

}

एंड्रॉयड ग्राहक के लिए कोड:

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

} 

}

मैं सर्वर से कनेक्ट करने के बावजूद UUID हैं नहीं पा रहा हूँ क्लाइंट और सर्वर दोनों के लिए ही वही। एंड्रॉइड एक अपवाद फेंकता है: सेवा खोज विफल रही। हालांकि मैं सर्वर पर रिमोट डिवाइस (क्लाइंट) का नाम प्रिंट करने में सक्षम हूं। इसलिए acceptAndOpen() सॉकेट कनेक्शन स्वीकार करने में असमर्थ है।

कृपया मुझे यह समझने में सहायता करें कि मैं clientSocket.connect() में क्यों असमर्थ हूं; एंड्रॉइड पर?

+0

क्या आपने इसे हल करने में कामयाब रहे हैं? मुझे एक ही समस्या है और मैं इसे काम नहीं कर पा रहा हूं। – blastervla

उत्तर

1

मैं अनुमान लगाऊंगा और कहूंगा कि आपके द्वारा उपयोग किए गए यूयूआईडी नंबरों के साथ इसका कुछ संबंध है। वे पूरी तरह से आपके द्वारा उपयोग किए जाने वाले डिवाइस के प्रकार पर निर्भर करते हैं। तो सुनिश्चित करें कि आप उन्हें देखें और वे एंड्रॉइड डिवाइस के लिए सही हैं। जब मैं एंड्रॉइड कर रहा था तो यह मुझे लंबे समय तक फंस गया। यूयूआईडी आपके द्वारा सेट की गई कुछ नहीं है। यहाँ एक लिंक How can I get the UUID of my Android phone in an application? या इस Android - Get Bluetooth UUID for this device

हैं कि यह नहीं है। क्या दोनों सिरों पर खोज विफल रही? क्या आप डिवाइस को किसी भी अंत में देख सकते हैं? आप किस नाम को प्रिंट कर सकते हैं? आप Google के ब्लूटूथ नमूना कार्यक्रम पर एक नज़र डालना चाहते हैं। और शुरू करने के लिए इसका इस्तेमाल करें।

संबंधित मुद्दे