Android Bluetooth kann keine Verbindung herstellenAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Android Bluetooth kann keine Verbindung herstellen

Post by Anonymous »

Ich habe dieses Problem schon seit einiger Zeit und konnte es nicht herausfinden.
Ich habe eine Android-Anwendung, die alle gekoppelten Geräte in einer Listenansicht anzeigt. Wenn Sie auf eines der Listenelemente klicken, wird eine Anfrage zur Verbindung mit diesem Bluetooth-Gerät initiiert.
Ich kann die Liste der Geräte mit ihren Adressen problemlos abrufen.
Das Problem ist, dass ich beim Versuch, eine Verbindung herzustellen, eine IOException für socket.connect(); erhalte.
Die Fehlermeldung lautet wie folgt:

Connect-Lesevorgang fehlgeschlagen, Socket möglicherweise geschlossen oder Timeout, Lese-Ret: -1

Hier ist mein Code. Wie kann ich das beheben?
Zu Ihrer Information: Die „onEvent“-Methoden sind eine Bibliothek, die Rückrufe vereinfacht … dieser Teil funktioniert.
Wenn der Benutzer auf ein Listenelement klickt, wird diese Methode „public void onEvent(EventMessage.DeviceSelected event)“ genannt:

Code: Select all

public class EcoDashActivity extends BaseActivity {

public static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

private BluetoothAdapter mBluetoothAdapter;
private int REQUEST_ENABLE_BT = 100;
private ArrayList mDevicesList;
private BluetoothDeviceDialog mDialog;
private ProgressDialog progressBar;
private int progressBarStatus = 0;
private Handler progressBarHandler = new Handler();

@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);

mDevicesList = new ArrayList();

// Register the BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);

setupBluetooth();
}

private void setupBluetooth() {
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
// Device does not support Bluetooth
Toast.makeText(this, "Device does not support Bluetooth", Toast.LENGTH_SHORT).show();
}

if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
} else {
searchForPairedDevices();
mDialog = new BluetoothDeviceDialog(this, mDevicesList);
mDialog.show(getFragmentManager(), "");
}
}

private void searchForPairedDevices() {

Set pairedDevices = mBluetoothAdapter.getBondedDevices();
// If there are paired devices
if (pairedDevices.size() > 0) {
// Loop through paired devices
for (BluetoothDevice device : pairedDevices) {
// Add the name and address to an array adapter to show in a ListView
mDevices.add(device.getName() + "\n"  + device.getAddress());
mDevicesList.add(device);
}
}
}

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// When discovery finds a device
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// Get the BluetoothDevice object from the Intent
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// Add the name and address to an array adapter to show in a ListView
mDevicesList.add(device);
}
}
};

@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_ENABLE_BT) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, "BT turned on!", Toast.LENGTH_SHORT).show();
searchForPairedDevices();

mDialog = new BluetoothDeviceDialog(this, mDevicesList);
mDialog.show(getFragmentManager(), "");
}
}

super.onActivityResult(requestCode, resultCode, data);
}

public void onEvent(EventMessage.DeviceSelected event) {

mDialog.dismiss();

BluetoothDevice device = event.getDevice();

ConnectThread connectThread = new ConnectThread(device);
connectThread.start();
}

public class ConnectThread extends Thread {

private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;

public ConnectThread(BluetoothDevice device) {
// Use a temporary object that is later assigned to mmSocket,
// because mmSocket is final
BluetoothSocket tmp = null;
mmDevice = device;

// Get a BluetoothSocket to connect with the given BluetoothDevice
try {
// MY_UUID is the app's UUID string, also used by the server code
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) { }
mmSocket = tmp;
}

public void run() {
setName("ConnectThread");
// Cancel discovery because it will slow down the connection
mBluetoothAdapter.cancelDiscovery();

try {
// Connect the device through the socket. This will block
// until it succeeds or throws an exception
Log.d("kent", "trying to connect to device");
mmSocket.connect();
Log.d("kent", "Connected!");
} catch (IOException connectException) {
// Unable to connect; close the socket and get out
try {
Log.d("kent", "failed to connect");

mmSocket.close();
} catch (IOException closeException) { }
return;
}

Log.d("kent", "Connected!");
}

/** Will cancel an in-progress connection, and close the socket */
public void cancel() {
try {
mmSocket.close();
} catch (IOException e) { }
}
}
Hier ist mein LogCat. Ziemlich kurz.

Code: Select all

07-22 10:37:05.129: DEBUG/kent(17512): trying to connect to device
07-22 10:37:05.129: WARN/BluetoothAdapter(17512): getBluetoothService() called with no BluetoothManagerCallback
07-22 10:37:05.129: DEBUG/BluetoothSocket(17512): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[98]}
07-22 10:37:40.757: DEBUG/dalvikvm(17512): GC_CONCURRENT freed 6157K, 9% free 62793K/68972K, paused 7ms+7ms, total 72ms
07-22 10:38:06.975: DEBUG/kent(17512): failed to connect
07-22 10:38:06.975: DEBUG/kent(17512): read failed, socket might closed or timeout, read ret: -1
Diese letzte Zeile befindet sich im Abschnitt „Catch“ eines Try/Catch ... Ich protokolliere nur die Fehlermeldung.
Bitte beachten Sie, dass zwischen „Versuch, Verbindung zum Gerät herzustellen“ und „Verbindung fehlgeschlagen“ eine Lücke von etwa 20 Sekunden liegt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post