2010-11-11 233 views
0

我正在创建一个应用程序,它使用android通过蓝牙发送和接收数据。但是我在创建套接字时遇到了问题。他被抓到那行 - mmSocket btserver.accept =();而且我无法与任何设备配对。蓝牙套接字连接

我还有一个疑问,我可以使用android和symbian进行通信吗?

回答

1

代码如下。他找到设备但没有打开通信套接字。

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    bluetooth = BluetoothAdapter.getDefaultAdapter(); 
    msg = (TextView) findViewById(R.id.msg); 

    if (bluetooth.isEnabled()) { 
     String address = bluetooth.getAddress(); 
     String name = bluetooth.getName(); 
     toastText = name + " : " + address; 
    } 
    else 
     toastText = "Bluetooth is not enabled"; 

    Toast.makeText(this, toastText, Toast.LENGTH_LONG).show(); 
    msg.append("Bluetooth is not enabled"); 

    enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE; 
    startActivityForResult(new Intent(enableBT), 0); 

    String aDiscoverable = BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE; 
    startActivityForResult(new Intent(aDiscoverable),DISCOVERY_REQUEST); 

    registerReceiver(new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String prevScanMode = BluetoothAdapter.EXTRA_PREVIOUS_SCAN_MODE; 
      String scanMode = BluetoothAdapter.EXTRA_SCAN_MODE; 
      int scanMode1 = intent.getIntExtra(scanMode, -1); 
      int prevMode1 = intent.getIntExtra(prevScanMode, -1); 
     } 
    }, 
    new IntentFilter(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED)); 

    BroadcastReceiver discoveryResult = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      remoteDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME); 
      remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
      Toast.makeText(getApplicationContext(), 
      "Discovered: " + remoteDeviceName, 
      Toast.LENGTH_SHORT).show(); 
      msg.append("\n"+remoteDeviceName); 
      msg.append("\n"+remoteDevice); 
    } 
    }; 

    BroadcastReceiver discoveryMonitor = new BroadcastReceiver() { 
     String dStarted = BluetoothAdapter.ACTION_DISCOVERY_STARTED; 
     String dFinished = BluetoothAdapter.ACTION_DISCOVERY_FINISHED; 

     public void onReceive(Context context, Intent intent) { 
      if (dStarted.equals(intent.getAction())) { 

       Toast.makeText(getApplicationContext(), 
       "Discovery Started . . . ", Toast.LENGTH_SHORT).show(); 
      } 
      else if (dFinished.equals(intent.getAction())) { 
      Toast.makeText(getApplicationContext(), 
      "Discovery Completed . . . ", Toast.LENGTH_SHORT).show(); 
     } 
     } 
    }; 
    registerReceiver(discoveryMonitor, 
     new IntentFilter(dStarted)); 

    registerReceiver(discoveryMonitor, 
     new IntentFilter(dFinished)); 

    startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE), DISCOVERY_REQUEST); 
    try { 
     btserver = bluetooth.listenUsingRfcommWithServiceRecord(name, uuid); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
    Thread acceptThread = new Thread(new Runnable() 
    { 
     public void run() 
     { 
      try { 
       btserver.accept(); 
      } catch (IOException e){ 
     Log.d("BLUETOOTH", e.getMessage()); 
     } 
     } 
    }); 
    acceptThread.start(); 
}  
} 
}