Я использую библиотеку Android IBeacon для проекта. Мне нужно создать Службу, начинающуюся в диапазоне для маяков в фоновом режиме и уведомлять пользователя, когда он найдет один (ближайший). Я много искал и кодировал на основе многих примеров, которые я нашел, но все же он не работает. Используя журналы, я обнаружил, что IBeaconManager не связывается, поэтому onIBeaconServiceConnect никогда не вызывается. Я уже пробовал некоторые решения, которые я нашел здесь, но ни один из них не был полезен. Я был бы очень признателен, если бы кто-то помог мне решить эту проблему. Я отправляю часть моего кода здесьИспользование библиотеки Android IBeacon на службе
public class RangingService extends Service implements IBeaconConsumer {
private IBeaconManager beaconManager;@Override public void onCreate() { super.onCreate(); beaconManager = IBeaconManager.getInstanceForApplication(this); Log.d("RangingService","Created beaconManager instance"); beaconManager.setBackgroundBetweenScanPeriod(120000); beaconManager.setBackgroundScanPeriod(30000); beaconManager.bind(this); if(beaconManager.isBound(this)) { Log.d("RangingService","Beacon manager bound"); } else { Log.d("RangingService","Beacon manager not bound"); } //Show the service has started notify("RangingService created", "RangingService has started"); } @Override public void onDestroy() { super.onDestroy(); beaconManager.unBind(this); } @Override public void onIBeaconServiceConnect() { Log.d("RangingService", "Entering onIBeaconServiceConnect"); beaconManager.setRangeNotifier(new RangeNotifier() { @Override public void didRangeBeaconsInRegion(Collection<IBeacon> beacons, Region region) { if(beacons.size() > 0) { IBeacon nearestBeacon = beacons.iterator().next(); for(IBeacon b : beacons) { if(nearestBeacon.getProximity() == IBeacon.PROXIMITY_UNKNOWN) { nearestBeacon = b; } else { if(b.getProximity() != IBeacon.PROXIMITY_UNKNOWN) { if(b.getAccuracy() < nearestBeacon.getAccuracy()) { nearestBeacon = b; } } } } Log.d("RangingService","Nearest Beacon Found "+nearestBeacon.getMajor()+";"+nearestBeacon.getMinor()); notify("Beacon read","Major: "+nearestBeacon.getMajor()+"; Minor: "+nearestBeacon.getMinor()); } else { Log.d("RangingService","No beacons"); } } }); try { Log.d("RangingService", "Entering startRangingBeacons"); beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); } catch(RemoteException e) { notificar("Error", e.getMessage()); Log.e("RangingService", "Error while starting scanning: "+e.getMessage()); } } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub Log.d("RangingService", "Entering onBind"); return null; }
Служба уже в моем манифесте также. Спасибо за вашу помощь.
Почему вы не используете методы 'onStartCommand()' и 'onBind()'? Как вы начинаете сервис и привязываетесь к нему? – Alberto
@Alberto Я запускаю службу из 'onCreate()' моего основного действия с помощью 'startService()'. Я не использую 'onBind()' или 'onStartCommand()', потому что примеры, которые я нашел, не используют их, и мой код основан на них. –