iBeacon(Kontakt Beacon) 区域监控 android
iBeacon(Kontakt Beacon) Region Monitoring In android
我正在开发一个基于信标设备的应用程序。场景是当用户通过信标设备范围到达附近时,他将收到通知。
为此,我试图在蓝牙处于关闭状态时在后台监控该区域,但它不起作用,即我没有收到任何回调,即 "onRegionEntered" 或 "onRegionAbandoned"。
所以问题是,当 phone 的蓝牙关闭(场外定位 (GPS) 开启)时,是否可以监控区域,如果是,那么如何,请提供任何示例或代码片段。
因为我们有 "Kontakt" 个 iBeacon 设备,所以我正在使用 kontakt sdk。
Kontakt SDK
我正在使用此配置进行区域监控
private void configureProximityManager() {
proximityManager.configuration()
.scanMode(ScanMode.BALANCED)
.activityCheckConfiguration(ActivityCheckConfiguration.MINIMAL)
.forceScanConfiguration(ForceScanConfiguration.MINIMAL)
//.deviceUpdateCallbackInterval(2000)
.rssiCalculator(RssiCalculators.newLimitedMeanRssiCalculator(5))
.monitoringEnabled(true)
.monitoringSyncInterval(3);
addReasonForMonitoring();
//GcmNetworkManager.getInstance(this).cancelTask();
}
private void addReasonForMonitoring(){
beaconRegions.clear();
beaconRegions.add(getBeaconReason());
proximityManager.spaces().iBeaconRegions(beaconRegions);
}
private BeaconRegion getBeaconReason(){
return new BeaconRegion.Builder()
.setIdentifier(FORKSPOT_REASON)
.setProximity(UUID.fromString(BEACON_UUID))
//.setMajor(restBeaconsInfo.getMajor())
//.setMinor(restBeaconsInfo.getMinor())
.build();
}
private void startMonitoring() {
Log.e(TAG,"start monitoring");
int checkSelfPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
if ((PackageManager.PERMISSION_GRANTED == checkSelfPermission) /*&& Utils.getBluetoothState()*/) {
proximityManager.connect(new OnServiceReadyListener() {
@Override
public void onServiceReady() {
Log.e(TAG, "startScanning");
proximityManager.startScanning();
}
});
} else {
Log.e(TAG, "Permission not guaranteed or bluetooth is off");
}
}
如果蓝牙关闭,您将无法检测到蓝牙 LE 信标。这是一个操作系统限制,并不特定于任何一个信标 SDK。
虽然这看起来很明显,但考虑到 Google 即使 WiFi 关闭也会在内部扫描 WiFi 网络以进行定位,这是一个公平的问题。然而,蓝牙并非如此。
我正在开发一个基于信标设备的应用程序。场景是当用户通过信标设备范围到达附近时,他将收到通知。
为此,我试图在蓝牙处于关闭状态时在后台监控该区域,但它不起作用,即我没有收到任何回调,即 "onRegionEntered" 或 "onRegionAbandoned"。
所以问题是,当 phone 的蓝牙关闭(场外定位 (GPS) 开启)时,是否可以监控区域,如果是,那么如何,请提供任何示例或代码片段。
因为我们有 "Kontakt" 个 iBeacon 设备,所以我正在使用 kontakt sdk。 Kontakt SDK
我正在使用此配置进行区域监控
private void configureProximityManager() {
proximityManager.configuration()
.scanMode(ScanMode.BALANCED)
.activityCheckConfiguration(ActivityCheckConfiguration.MINIMAL)
.forceScanConfiguration(ForceScanConfiguration.MINIMAL)
//.deviceUpdateCallbackInterval(2000)
.rssiCalculator(RssiCalculators.newLimitedMeanRssiCalculator(5))
.monitoringEnabled(true)
.monitoringSyncInterval(3);
addReasonForMonitoring();
//GcmNetworkManager.getInstance(this).cancelTask();
}
private void addReasonForMonitoring(){
beaconRegions.clear();
beaconRegions.add(getBeaconReason());
proximityManager.spaces().iBeaconRegions(beaconRegions);
}
private BeaconRegion getBeaconReason(){
return new BeaconRegion.Builder()
.setIdentifier(FORKSPOT_REASON)
.setProximity(UUID.fromString(BEACON_UUID))
//.setMajor(restBeaconsInfo.getMajor())
//.setMinor(restBeaconsInfo.getMinor())
.build();
}
private void startMonitoring() {
Log.e(TAG,"start monitoring");
int checkSelfPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
if ((PackageManager.PERMISSION_GRANTED == checkSelfPermission) /*&& Utils.getBluetoothState()*/) {
proximityManager.connect(new OnServiceReadyListener() {
@Override
public void onServiceReady() {
Log.e(TAG, "startScanning");
proximityManager.startScanning();
}
});
} else {
Log.e(TAG, "Permission not guaranteed or bluetooth is off");
}
}
如果蓝牙关闭,您将无法检测到蓝牙 LE 信标。这是一个操作系统限制,并不特定于任何一个信标 SDK。
虽然这看起来很明显,但考虑到 Google 即使 WiFi 关闭也会在内部扫描 WiFi 网络以进行定位,这是一个公平的问题。然而,蓝牙并非如此。