2016-11-10 2 views
0

мне нужно ранжировать маяки на фоне с использованием библиотеки Altbeacons (правильной работы в режиме переднего плана)iBeacons' начиная с Altbeacon Библиотека

На моем андроида мониторе журнал никогда не показывает сообщение для didRangeBeaconsInRegion метода.

На didEnterRegion сообщения отображаются правильно.

Я пробовал код ниже, но не успел, может ли кто-нибудь посоветовать мне, как это сделать?

public class INBeaconApplication extends Application implements BootstrapNotifier, RangeNotifier { 
private BeaconManager beaconManager; 
private ArrayList<INBeacon> userBeaconArrayList; 
private INBeaconUser inBeaconUser; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.d("INBeacon", "Application created"); 

    //BeaconManager and custom beaconParser layout 
    beaconManager = BeaconManager.getInstanceForApplication(this); 
    beaconManager.getBeaconParsers().clear(); 
    beaconManager.getBeaconParsers().add(new BeaconParser() 
      .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); 
    beaconManager.setRegionStatePeristenceEnabled(false); 

    //Set the BeacomManager background between scan periods 
    long period = 1000 * 30; //equal to 30 seconds 
    beaconManager.setBackgroundBetweenScanPeriod(period); 

    // wake up the app when a beacon is seen 
    Region region = new Region(Utils.REGION_ID, Identifier 
      .parse(Utils.INBEACON_UUID), null, null); 
    new RegionBootstrap(this, region); 

    new BackgroundPowerSaver(this); 
} 



boolean checkPermissionForRange(){ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     return getApplicationContext().checkSelfPermission(
       Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED; 
    } 
    return true; 
} 

@Override 
public void didEnterRegion(Region region) { 
    Log.d("INBeacon", "didEnterRegion"); 
    Utils.sendNotification(this, "Test"); 
    if (checkPermissionForRange()) return; 
    Log.d("INBeacon", "permissions ok"); 
    try { 
     beaconManager.startRangingBeaconsInRegion(region); 
     Log.d("INBeacon","startRanging"); 
    } catch (RemoteException e) { 
     Log.e("INBeacon",e.getMessage()); 
    } 
} 

@Override 
public void didExitRegion(Region region) { 
    Log.d("INBeacon", "didExitRegion"); 
    try { 
     beaconManager.stopRangingBeaconsInRegion(region); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public void didRangeBeaconsInRegion(Collection<Beacon> collection, Region region) { 
    Log.d("INBeacon", "didRangeBeaconsInRegion"); 
    ArrayList<Beacon> newBeacons = new ArrayList<>(collection); 
     .............code to do what i need with the beacons..... 
} 

ответ

0

Похоже, что код нужно просто позвонить:

beaconManager.setRangeNotifier(this); 
+0

Дэвид, я добавить, и теперь он работает, но этот метод показать, как осуждается, это нормально? – ClaudioBlanco

+0

также, это заставило его сканировать, как когда приложение открыто, есть другой способ, который заставил бы его искать их только в промежутке, например, когда я установил beaconManager.setBackgroundBetweenScanPeriod (period); – ClaudioBlanco

+1

К сожалению, не устаревшая версия - это beaconManager.addRangeNotifier (это); 'Вы должны увидеть остановку ранжирования в течение 30 секунд за один раз за ваши настройки фонового сканирования. – davidgyoung

Смежные вопросы