Это код, который предполагается для фонового сканирования в соответствии с образцом кода на странице altbeacon, но этого не происходит, я даже не получаю . Введите регион тег. RangingActivity, который реализует маяки BeaconConsumer без каких-либо проблем. Единственный журнал, который я вижу, - Начато сканирование в фоновом режиме!, когда я запускаю приложение в первый раз. Заранее спасибо.Не удается выполнить сканирование в фоновом режиме
public class BackgroundScanner extends Application implements BootstrapNotifier {
private String TAG="Background Scanner";
private RegionBootstrap regionBootstrap;
private BackgroundPowerSaver backgroundPowerSaver;
private boolean haveDetectedBeaconsSinceBoot = false;
private RangingActivity rangingActivity;
@Override
public void onCreate() {
Log.d(TAG,"Background Scanning Initiated!");
super.onCreate();
BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19"));
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT));
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
Region region = new Region("backgroundRegion",
null, null, null);
beaconManager.setBackgroundBetweenScanPeriod(60000L);
try {
beaconManager.updateScanPeriods();
} catch (RemoteException e) {
e.printStackTrace();
}
regionBootstrap = new RegionBootstrap(this, region);
backgroundPowerSaver = new BackgroundPowerSaver(this);
}
@Override
public void didEnterRegion(Region region) {
Log.d(TAG, "did enter region.");
sendNotification();
}
@SuppressLint("NewApi")
private void sendNotification() {
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this)
.setContentTitle("Notification!")
.setContentText("Beacon Nearby!")
.setSmallIcon(R.mipmap.ic_launcher);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntent(new Intent(this, RangingActivity.class));
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
builder.setContentIntent(resultPendingIntent);
NotificationManager notificationManager =
(NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, builder.build());
}
@Override
public void didExitRegion(Region region) {
}
@Override
public void didDetermineStateForRegion(int i, Region region) {
}
Лучше поставить такую фоновую задачу в службе Android, а не в приложении. –
@PetrovDmitrii Я хотел сделать это первым, но потом я узнал, что эта библиотека уже предоставляет услугу. –