Bluetooth-Geräteerkennung unter Android - startDiscovery ()

Tor: Erstellen Sie eine Android-App, die die Namen und Adressen von BT-Geräten in Reichweite ermittelt und deren Werte an einen Webservice übermittelt. BT-Geräte wurden bisher nicht mit dem Host-Gerät verbunden. Ich möchte nur alles abrufen, während ich mich bewege.

Was ich getan habe:

Über die Dokumentation nachgedacht.Implementierte eine lokale Instanz des BT-Adapters des Hostgeräts.Implementiert eine Benachrichtigung, um BT zu aktivieren, wenn es nicht aktiviert ist.Registrierte Rundfunkempfänger und Absichten zum Parsen derACTION_FOUNDs Abgehen vonstartDiscovery ().EingetragenBLUETOOTH undBLUETOOTH_ADMIN Berechtigungen im Manifest.

Die Dinge funktionieren (wie bei der inkrementellen Konsolenprotokollierung getestet) bisstartDiscovery().


Frustration:

startDiscovery () - Ich vermute, dass ich dies im falschen Kontext weitergebe. In welchem ​​Kontext muss diese Methode platziert werden, um ordnungsgemäß zu funktionieren?

Wenn Sie in der Lage gewesen wären, diese Methode zum Laufen zu bringen, würde ich Ihre Weisheit sehr schätzen.

AKTUALISIEREN - Hier ist eine vereinfachte Version des Codes, die mir Kummer bereitet. Diese Vereinfachung fasst meinen Fehler zusammen. Dieser Code läuft, es wirft keinecat.log Fehler oder andere Fehler, es gibt einfach keine Ausgabe.

<code>package aqu.bttest;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.Toast;

public class BT2Activity extends Activity {

private BluetoothAdapter mBTA;
private SingBroadcastReceiver mReceiver;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

  //register local BT adapter
    mBTA = BluetoothAdapter.getDefaultAdapter();
    //check to see if there is BT on the Android device at all
    if (mBTA == null){
        int duration = Toast.LENGTH_SHORT;
        Toast.makeText(this, "No Bluetooth on this handset", duration).show();
    }
    //let's make the user enable BT if it isn't already
    if (!mBTA.isEnabled()){
        Intent enableBT = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBT, 0xDEADBEEF);
    }
    //cancel any prior BT device discovery
    if (mBTA.isDiscovering()){
        mBTA.cancelDiscovery();
    }
    //re-start discovery
    mBTA.startDiscovery();

    //let's make a broadcast receiver to register our things
    mReceiver = new SingBroadcastReceiver();
    IntentFilter ifilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    this.registerReceiver(mReceiver, ifilter);
}

private class SingBroadcastReceiver extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction(); //may need to chain this to a recognizing function
        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 Toast
            String derp = device.getName() + " - " + device.getAddress();
            Toast.makeText(context, derp, Toast.LENGTH_LONG);
        }
    }
}
</code>

}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage