Android Beacon Library真的支持后台扫描吗?
Does Android Beacon Library really support background scanning?
我正在使用 Android Beacon Library for BLE scanning with example。它在前台可以很好地进行监控和测距。但是,对于后台,它仅适用于在应用程序中按 "Home" 并关闭屏幕的情况。当我从任务切换器中终止应用程序时,它不起作用。在这个例子中,我找不到任何类似服务的东西来让事情在后台运行。
问题:
- 如果应用程序在任务切换器中被杀死,Beacon Library 是否支持后台扫描?Android
- 如果可以,该怎么做?有什么例子吗?
我与 android iBeaon 库一起工作,我创建了一项服务用于后台扫描,并在服务中定义了监控和测距。当应用程序被破坏并且它对我有用时,我开始服务。像这样创建新服务。
public class Beaconservice extends Service implements IBeaconConsumer {
private ArrayList<IBeacon> arrayL = new ArrayList<IBeacon>();
private BeaconServiceUtility beaconUtill = null;
private IBeaconManager iBeaconManager = IBeaconManager.getInstanceForApplication(this);
private Handler hand;
private Runnable runn;
private int count = 30;
@Override
public void onIBeaconServiceConnect() {
iBeaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<IBeacon> iBeacons, Region region) {
arrayL.clear();
arrayL.addAll((ArrayList<IBeacon>) iBeacons);
if(count>0){
count=0;
}
}
});
iBeaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
Log.e("BeaconDetactorService", "didEnterRegion");
// logStatus("I just saw an iBeacon for the first time!");
}
@Override
public void didExitRegion(Region region) {
Log.e("BeaconDetactorService", "didExitRegion");
// logStatus("I no longer see an iBeacon");
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
Log.e("BeaconDetactorService", "didDetermineStateForRegion");
// logStatus("I have just switched from seeing/not seeing iBeacons: " + state);
}
});
try {
iBeaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
} catch (RemoteException e) {
e.printStackTrace();
}
try {
iBeaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
beaconUtill = new BeaconServiceUtility(this);
Log.e("UUID","start service");
hand = new Handler();
runn = new Runnable() {
@Override
public void run() {
count ++;
hand.postDelayed(runn, 1000);
}
};
hand.post(runn);
super.onCreate();
}
@Override
@Deprecated
public void onStart(Intent intent, int startId) {
beaconUtill.onStart(iBeaconManager, this);
beaconUtill = new BeaconServiceUtility(this);
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
beaconUtill.onStop(iBeaconManager, this);
super.onDestroy();
}
}
在AndroidManifest.xml
<service android:name="com.beacone.keyfinder.app.Beaconservice" >
</service>
没有,其他任何应用也没有。通过任务切换器终止任务意味着终止该应用程序的进程,并且由于您的后台扫描依赖于一项服务,因此该服务也会被终止,因为服务不会启动自己的进程。
您可能有一个 AlarmManager,它会定期检查您的服务是否 运行,如果不是,则自动启动它,但我想如果您这样做会耗尽电池电量将间隔设置得太低。
是的,Android 信标库将在应用程序被终止后继续检测信标,但恢复扫描可能需要一些时间。详情请看这里:
http://altbeacon.github.io/android-beacon-library/resume-after-terminate.html
该库使用 AlarmManager 来完成此操作,扫描最多可能需要五分钟才能恢复。
您 link 参考的应用程序实际上有一个示例,说明如何使用 RegionBootstrap
class 进行设置。一个更具描述性的示例在此处“在后台启动应用程序”部分下的代码示例中:http://altbeacon.github.io/android-beacon-library/samples.html
我正在使用 Android Beacon Library for BLE scanning with example。它在前台可以很好地进行监控和测距。但是,对于后台,它仅适用于在应用程序中按 "Home" 并关闭屏幕的情况。当我从任务切换器中终止应用程序时,它不起作用。在这个例子中,我找不到任何类似服务的东西来让事情在后台运行。
问题:
- 如果应用程序在任务切换器中被杀死,Beacon Library 是否支持后台扫描?Android
- 如果可以,该怎么做?有什么例子吗?
我与 android iBeaon 库一起工作,我创建了一项服务用于后台扫描,并在服务中定义了监控和测距。当应用程序被破坏并且它对我有用时,我开始服务。像这样创建新服务。
public class Beaconservice extends Service implements IBeaconConsumer {
private ArrayList<IBeacon> arrayL = new ArrayList<IBeacon>();
private BeaconServiceUtility beaconUtill = null;
private IBeaconManager iBeaconManager = IBeaconManager.getInstanceForApplication(this);
private Handler hand;
private Runnable runn;
private int count = 30;
@Override
public void onIBeaconServiceConnect() {
iBeaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<IBeacon> iBeacons, Region region) {
arrayL.clear();
arrayL.addAll((ArrayList<IBeacon>) iBeacons);
if(count>0){
count=0;
}
}
});
iBeaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
Log.e("BeaconDetactorService", "didEnterRegion");
// logStatus("I just saw an iBeacon for the first time!");
}
@Override
public void didExitRegion(Region region) {
Log.e("BeaconDetactorService", "didExitRegion");
// logStatus("I no longer see an iBeacon");
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
Log.e("BeaconDetactorService", "didDetermineStateForRegion");
// logStatus("I have just switched from seeing/not seeing iBeacons: " + state);
}
});
try {
iBeaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
} catch (RemoteException e) {
e.printStackTrace();
}
try {
iBeaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
beaconUtill = new BeaconServiceUtility(this);
Log.e("UUID","start service");
hand = new Handler();
runn = new Runnable() {
@Override
public void run() {
count ++;
hand.postDelayed(runn, 1000);
}
};
hand.post(runn);
super.onCreate();
}
@Override
@Deprecated
public void onStart(Intent intent, int startId) {
beaconUtill.onStart(iBeaconManager, this);
beaconUtill = new BeaconServiceUtility(this);
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
beaconUtill.onStop(iBeaconManager, this);
super.onDestroy();
}
}
在AndroidManifest.xml
<service android:name="com.beacone.keyfinder.app.Beaconservice" >
</service>
没有,其他任何应用也没有。通过任务切换器终止任务意味着终止该应用程序的进程,并且由于您的后台扫描依赖于一项服务,因此该服务也会被终止,因为服务不会启动自己的进程。
您可能有一个 AlarmManager,它会定期检查您的服务是否 运行,如果不是,则自动启动它,但我想如果您这样做会耗尽电池电量将间隔设置得太低。
是的,Android 信标库将在应用程序被终止后继续检测信标,但恢复扫描可能需要一些时间。详情请看这里: http://altbeacon.github.io/android-beacon-library/resume-after-terminate.html
该库使用 AlarmManager 来完成此操作,扫描最多可能需要五分钟才能恢复。
您 link 参考的应用程序实际上有一个示例,说明如何使用 RegionBootstrap
class 进行设置。一个更具描述性的示例在此处“在后台启动应用程序”部分下的代码示例中:http://altbeacon.github.io/android-beacon-library/samples.html