2

アプリでビーコンをスキャンするためにAltbeaconライブラリを使用しています。広告があるときに通知をスキャンしてプッシュすることに成功しました。私の要件は、UUID のリストをスキャンする必要があることですが、ドキュメントに示されている例では、スキャンに 1 つの UUID のみを使用しています。

これまでに行ったことは次のとおりです。BeaconConsumer を BaseActivity に配置して、起動直後にスキャンを開始するようにしました (バックグラウンド スキャンなし)。

public class BaseActivity extends SlidingFragmentActivity implements BeaconConsumer {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...

        beaconManager = BeaconManager.getInstanceForApplication(this);
        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);
    }

    @Override
    public void onBeaconServiceConnect() {
        beaconManager.setMonitorNotifier(new MonitorNotifier() {
            @Override
            public void didEnterRegion(Region region) {
                Intent intent = new Intent(getApplicationContext(), BeaconNotificationService.class);
                intent.putExtra("uuid", region.getId1().toString());
                intent.putExtra("major", region.getId2().toString());
                intent.putExtra("minor", region.getId3().toString());
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startService(intent);
            }

            @Override
            public void didExitRegion(Region region) {
                Log.i(TAG, "I no longer see any beacon");
            }

            @Override
            public void didDetermineStateForRegion(int state, Region region) {
                Log.i(TAG, "I have just switched from seeing/not seeing beacons: "+state);
            }
        });

        try {
            beaconManager.startMonitoringBeaconsInRegion(new Region("com.my.app.boostrapRegion",
                    Identifier.parse(Constants.BT_UUID),
                    Identifier.fromInt(Constants.BT_MAJOR),
                    Identifier.fromInt(Constants.BT_MINOR)));
        } catch (RemoteException e) { e.printStackTrace(); }
    }

}

Constants クラスでは、テスト目的で UUID を定義しました。

public class Constants {

    public static final String BT_UUID = "bbbbbbbb-3443-8888-3443-bb323bbb0005";
    public static final int BT_MAJOR = 0;
    public static final int BT_MINOR = 0;

}

BeaconConsumer によってスキャンされる UUID の配列をどのように配置すればよいでしょうか?

ありがとう

4

1 に答える 1

1

リージョンで UUID を定義する代わりに、 を追加nullして、範囲内のすべてのビーコンを見つけることができます。後で、探しているビーコンを除外できます。この例では、わかりやすくするために、メジャー ID とマイナー ID をそのまま残しました。

try {
    beaconManager.startMonitoringBeaconsInRegion(new Region("com.my.app.boostrapRegion",
    null,
    Identifier.fromInt(Constants.BT_MAJOR),
    Identifier.fromInt(Constants.BT_MINOR)));
} catch (RemoteException e) { e.printStackTrace(); }
于 2014-12-03T12:26:40.450 に答える