【发布时间】:2015-06-14 08:29:09
【问题描述】:
我正在将 BeaconConsumer 与 Activity 一起使用,并且工作正常。当我使用服务实现 BeaconConsumer 时,它不起作用。
SimpleService extends Service implements BeaconConsumer {
protected static final String TAG = "MyBeaconService";
String UUID = "EXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
private BeaconManager mBeaconManager;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mBeaconManager = BeaconManager.getInstanceForApplication(this);
mBeaconManager.setDebug(true);
mBeaconManager.bind(this);
Log.e("", "onCreate");
}
@Override
public void onStart(Intent intent, int startId) {
Log.i(TAG, "onStart called");
mBeaconManager
.getBeaconParsers()
.add(new BeaconParser()
.setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
mBeaconManager.bind(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand called");
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i(TAG, "Service destroyed ...");
mBeaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
Log.e("", "onBeaconServiceConnect");
mBeaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
try {
Log.e(TAG, "didEnterRegion");
mBeaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void didExitRegion(Region region) {
try {
Log.e(TAG, "didExitRegion");
mBeaconManager.stopRangingBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void didDetermineStateForRegion(int i, Region region) {
}
});
mBeaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons,
Region region) {
for (Beacon oneBeacon : beacons) {
Log.e("", "setRangeNotifier");
Log.e("", "ID 1" + oneBeacon.getId1());
Log.e("", "ID 2" + oneBeacon.getId2());
Log.e("", "ID 3" + oneBeacon.getId3());
Log.e(TAG, "distance: " + oneBeacon.getDistance());
Log.e("",
"oneBeacon.getBluetoothAddress() :- "
+ oneBeacon.getBluetoothAddress());
}
}
});
try {
mBeaconManager.startMonitoringBeaconsInRegion(new Region(
"myBeaons", Identifier.parse(UUID), null, null));
mBeaconManager.startRangingBeaconsInRegion(new Region("myBeaons",
Identifier.parse(UUID), null, null));
} catch (RemoteException e) {
e.printStackTrace();
}
}
这将不起作用。它没有提供信标的详细信息,而是在 logcat 中显示 - Logcat 消息
04-09 11:07:40.053:D/BeaconParser(8765):这不是匹配的 Beacon 广告。 (期望是ac。我看到的字节是:0201061aff4c000215e2c56db5dffb48d2b060d0f5a71096e000000000c5020a000816f0ff640000000011094d696e69426561636f6e5f30303 04-09 11:07:40.648: D/BluetoothAdapter(8765): onScanResult() - Device=F2:75:FA:D7:6E:19 RSSI=-45
那么,我如何将 BeaconConsumer 类与服务一起使用,以便在应用程序关闭与否时获取信标的所有详细信息。请帮忙
【问题讨论】:
标签: android service ibeacon-android background-service