IBeacons scannen und Entfernung bestimmen

  • Antworten:0
Louis Nell
  • Forum-Beiträge: 15

19.02.2015, 00:40:05 via Website

Hey Leute
Ich habe mich seit einigen Tagen in die Android programmierung eingelesen was von der Sache her kein Problem war da ich schon seit 2 Jahren Java am desktop programmiere.
So langsam verzweifel ich jedoch an der Problemstellung die umgebung nach ibeacons abzusuchen und zu diesen dann den Abstand zu bestimmen.
Ich finde einfach keinen richtigen Ansatz wie ich das am besten angehe.
Die AltBeacon SDK habe ich mir angeschaut, jedoch nicht verstanden wie ich diese anwenden kann. Das Testscript bekomme ich zum laufen , ist jedoch mega undurchsichtig so das ich nichtmal so richtig sicher weis wo das Script einsteigt.

Dann dachte ich mir ich könnte die Abfrage direkt über das Bluetooth Modul angehen ohne SDK und bin auf diese Seite gestoßen.

https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

Dort kamen jedoch auch schnell Probleme auf. Die Zeile "private LeDeviceListAdapter mLeDeviceListAdapter;" kennt mein Java einfach nicht und kann es nciht importieren.
Nahc stundenlangen googlen habe ich herausgefunden man soll die einfach durch "ArrayAdapter mLeDeviceAdapter " ersetzen können, Pustekuchen.

Jezt bekomme ich immer folgende Fehleranzeige in der Zeile "mHandler.postDelayed" im DeviceScan:

 Caused by: java.lang.NullPointerException
        at com.example.libero.myapplication.DeviceScanActivity.scanLeDevice(DeviceScanActivity.java:25)
        at com.example.libero.myapplication.MainActivity.start(MainActivity.java:68)
        at com.example.libero.myapplication.MainActivity.onCreate(MainActivity.java:23)

Jetzt bin ich nach einem Tag auf der Stelle treten echt verzweifelt das ich so eine eigentlich einfache Problemstellung nicht gelöst bekomme.
Ich hoffe wirklich einer von mir kann euch helfen damit ich endlich wieder Licht am Ende des Tunnels sehe ^^
Vllt kennt ja jmd ein gutes tutorial oder kann mir AltBeacon etwas näher erklären wie ich damit arbeiten kann oder vllt kann jmd meinem Codeschnipselfehler beheben @_@
So viele Möglichkeiten und doch komme ich nicht weiter :x

Mfg Louis

MainActivity.java

package com.example.libero.myapplication;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
private BluetoothAdapter mBluetoothAdapter;
private final static int REQUEST_ENABLE_BT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    start();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public void start(){
    if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
        Toast.makeText(this, "Bluetooth LE nicht unterstützt", Toast.LENGTH_SHORT).show();
        //finish();
    }

    // Initializes Bluetooth adapter.
    final BluetoothManager bluetoothManager =
            (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
    mBluetoothAdapter = bluetoothManager.getAdapter();

    // Ensures Bluetooth is available on the device and it is enabled. If not,
    // displays a dialog requesting user permission to enable Bluetooth.
    if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }

    DeviceScanActivity test = new DeviceScanActivity();
    test.scanLeDevice(true);

}

}

DeviceScanActivity.java

package com.example.libero.myapplication;

import android.app.ListActivity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.os.Handler;
import android.widget.ArrayAdapter;

/**
* Activity for scanning and displaying available BLE devices.
*/
public class DeviceScanActivity extends ListActivity {

private ArrayAdapter mLeDeviceListAdapter;
private BluetoothAdapter mBluetoothAdapter;
private boolean mScanning;
private Handler mHandler;

// Stops scanning after 10 seconds.
private static final long SCAN_PERIOD = 10000;

public void scanLeDevice(final boolean enable) {
    if (enable) {
        // Stops scanning after a pre-defined scan period.
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mScanning = false;
                mBluetoothAdapter.stopLeScan(mLeScanCallback);
            }
        }, SCAN_PERIOD);

        mScanning = true;
        mBluetoothAdapter.startLeScan(mLeScanCallback);
    } else {
        mScanning = false;
        mBluetoothAdapter.stopLeScan(mLeScanCallback);
    }

}

private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
            @Override
            public void onLeScan(final BluetoothDevice device, int rssi,
                                 byte[] scanRecord) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mLeDeviceListAdapter.add(device);
                        mLeDeviceListAdapter.notifyDataSetChanged();
                    }
                });
            }
        };

}

Antworten