问题
I'm creating an application that uses an android to send and receive data via bluetooth. but I'm having problems when creating the socket. He gets caught in that line mmSocket btserver.accept = (); And I can not pair with any device.
I have another doubt, I can make that communication with an android and a symbian?
回答1:
The code is below. He finds devices but does not open the communication socket.
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();
}
}
}
来源:https://stackoverflow.com/questions/4158828/bluetooth-socket-connection