Bluetooth device discovery in Android — startDiscovery()

Ziel: Bauen eine Android-app, entdeckt die Namen und Adressen der BT-Geräten in Reichweite und sendet, deren Werte zu einem webservice. BT-Geräte wurden bislang noch nicht verklebt, um das host-Gerät, ich möchte nur Umfrage alles so, wie ich zu Fuß über.

Was ich getan habe:

  1. Brütete über Unterlagen.
  2. Implementiert eine lokale Instanz von host-Gerät BT-adapter.
  3. Implementiert eine Benachrichtigung zu ermöglichen, BT, wenn es nicht aktiviert ist.
  4. Registrierten Broadcast Receiver und Absichten zu analysieren, die ACTION_FOUNDs kommen aus der startDiscovery().
  5. Registriert BLUETOOTH und BLUETOOTH_ADMIN Berechtigungen in der manifest.

Dinge funktionieren (getestet mit inkremental-Konsole Protokollierung) bis startDiscovery().

Frustration:

  • startDiscovery() -- ich vermute, leite ich diese in der falschen Kontext. Welchem Kontext steht diese Methode platziert werden müssen, um richtig funktionieren?

Wenn Sie in der Lage gewesen, um diese Methode funktioniert, wäre ich sehr dankbar, Eure Weisheit.

UPDATE - hier ist eine abgespeckte, vereinfachte version des Codes, die verursacht mir Kummer; diese Vereinfachung rekapituliert, mein Fehler. Dieser code ausgeführt wird, es wirft kein cat.log Fehler oder andere Fehler, die es einfach nicht geben keine Ausgabe.

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

}

InformationsquelleAutor der Frage Lemminkainen | 2012-05-12

Schreibe einen Kommentar