-1

私はエンジニアリングのフランス人学生で、Android 言語を独学で学んでいます。友人と私は、iBeacon テクノロジに基づく Android アプリを作成する必要があります。数日前に AltBeacon ライブラリを発見し、素晴らしいと思いましたが、いくつか質問があります。

まず、私はプログラミングの初心者であり、私の質問はあなたにとってばかげていることを理解する必要があります。しかし、私は本当に助けが必要です;)

Android は Bluetooth.LE Api を提供しており、メソッド startLeScan() を使用して BluetoothDevice を取得できることを理解しました。しかし、iBeacon デバイスをスキャンして Beacon オブジェクトを取得できる同等の方法である AltBeacon ライブラリを使用したい場合はどうすればよいでしょうか?

もう 1 つの質問ですが、startLeScan() を使用して BluetoothDevice を取得した場合、AltBeacon メソッドを使用するためにそれを Beacon に変換するにはどうすればよいですか?

英語の間違いで申し訳ありません。質問が理解できることを願っています。さよなら

4

3 に答える 3

3

これは、iBeacon を検出し、AltBeacon ライブラリを使用して Android サービスでビーコン オブジェクトを取得するために使用するものです。

BeaconManager をセットアップする

BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.setForegroundScanPeriod(5100);
beaconManager.setForegroundBetweenScanPeriod(2000);
beaconManager.setBackgroundScanPeriod(5100);
beaconManager.setBackgroundBetweenScanPeriod(2000);

//Parse IBeacon structure
beaconManager.getBeaconParsers().add(new BeaconParser().
                setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);

ビーコンの測距を開始

private void startBeaconRangeFinderService() {
        beaconManager.setRangeNotifier(new RangeNotifier() {

        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, org.altbeacon.beacon.Region region) {
            try {
                if (beacons.size() > 0) {
                    for (Beacon b : beacons) {
                        processYourBeaconInThisMethod(b);
                    }
                }
            } catch (Exception ex) {
                Log.e(TAG_BEACON_ACTIVITY, "Error was thrown: " + ex.getMessage());
            }
        }
    });
    try {
        beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
    } catch (RemoteException e) {
        Log.e(TAG_BEACON_ACTIVITY, "Error was thrown: " + e.getMessage());
    }
}
于 2015-09-15T10:28:07.503 に答える
1

nv-bluetoothは、広告パケットから iBeacon を抽出する最も簡単な方法だと思います。以下はonLeScanメソッドの実装例です。

public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
{
    // Parse the payload of the advertising packet.
    List<ADStructure> structures =
        ADPayloadParser.getInstance().parse(scanRecord);

    // For each AD structure contained in the advertising packet.
    for (ADStructure structure : structures)
    {
        if (structure instanceof IBeacon)
        {
            // iBeacon was found.
            IBeacon iBeacon = (IBeacon)structure;

            // Proximity UUID, major number, minor number and power.
            UUID uuid = iBeacon.getUUID();
            int major = iBeacon.getMajor();
            int minor = iBeacon.getMinor();
            int power = iBeacon.getPower();

            ........

詳細については、「AD 構造の一種としての iBeacon」を参照してください。

于 2015-03-20T17:06:05.653 に答える
1

Android ビーコン ライブラリを使用して簡単にビーコンをスキャンし、ここで説明する「Ranging API」を使用して結果を返すことができます。

http://altbeacon.github.io/android-beacon-library/samples.html

ライブラリ コードを直接呼び出しstartLeScan()て使用し、結果をビーコン オブジェクトに変換する場合は、スキャン コールバックで次のメソッドを呼び出すことができます。

Beacon beacon = beaconParser.fromScanData(scanData, rssi, bluetoothDevice)

BeaconParserただし、独自のビーコン形式 (Apple など) を使用する場合は、適切なレイアウトでを構築する必要があります。これは独自の情報ですが、Google 検索を実行して、 BeaconParser独自のレイアウト用の を構築する適切な方法を見つけることができます。

于 2015-02-28T00:05:20.673 に答える