-1

我正在开发用于监视和配置信标设备的应用程序。我需要同时监控 iBeacon 和 Eddystone 信标设备。我已经通过了 nRF 主控制应用程序。它工作完美。但我需要一个源代码。是否有任何其他选项可用。请给我分析信标设备的最佳解决方案。提前致谢。

4

1 回答 1

0

我建议您使用我在一个项目中使用过的AltBeacon库,它非常好(我与它没有任何关联)。它提供了与信标交互的 API。

Activity这是一个让您入门的示例:

public class MyActivity extends AppCompatActivity implements
    BeaconConsumer,
    BootstrapNotifier,
    RangeNotifier
{
    private RegionBootstrap                    mRegionBootstrap;
    private org.altbeacon.beacon.BeaconManager mAltBeaconManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_application);

        mAltBeaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(MyActivity.this);

        boolean isBleAvailableAndEnabled;
        try {
            isBleAvailableAndEnabled = mAltBeaconManager.checkAvailability();
        } catch (BleNotAvailableException ex) {
            isBleAvailableAndEnabled = false;
        }

        if (!isBleAvailableAndEnabled) {
            // Handle case ...
            finish();
        }

        // Disable Android L scanning on devices with Android 5.0 and above
        if (Build.VERSION.SDK_INT >= 21) mAltBeaconManager.setAndroidLScanningDisabled(true);

        // Add iBeacon Layout
        mAltBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));

        // Add Eddystone Layout
        mAltBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("Eddystone_layout"));

        mAltBeaconManager.setBackgroundBetweenScanPeriod(3000); // 3 sec
        mAltBeaconManager.setBackgroundScanPeriod(5000); // 5 sec
        mAltBeaconManager.bind(MyActivity.this);

        // Enable Beacon scanning
        mRegionBootstrap = new RegionBootstrap(MyActivity.this, getScanningRegion());
    }

    @Override
    public Context getApplicationContext() {
        return (!isFinishing()) ? MyActivity.this : null);
    }

    @Override
    public void onBeaconServiceConnect() {
        try {
            // Attach beacon range listener
            mAltBeaconManager.setRangeNotifier(this);
            mAltBeaconManager.startRangingBeaconsInRegion(new Region("Region", null, null, null));
        } catch (RemoteException ex) {
            // Handle exception
        }
    }

    @Override
    public void unbindService(ServiceConnection serviceConnection) {
        // Not needed
    }

    @Override
    public boolean bindService(Intent intent, ServiceConnection serviceConnection, int i) {
        return false;
    }

    @Override
    public void didEnterRegion(Region region) {
        // Handle event
    }

    @Override
    public void didExitRegion(Region region) {
        // Handle event
    }

    @Override
    public void didDetermineStateForRegion(int i, Region region) {
        // Handle event
    }

    @Override
    public void didRangeBeaconsInRegion(Collection<org.altbeacon.beacon.Beacon> rangingBeacons, Region region) {
        // Here you will receive the beacons which are currently in range
    }
}

将此添加到您的清单中:

<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

注意:另外,请注意这个库的限制,这本质上是 Android 对信标支持的软件和硬件限制。

于 2016-05-18T10:44:20.913 回答