gpt4 book ai didi

android - 如何在android中使用服务实现BeaconConsumer

转载 作者:行者123 更新时间:2023-11-30 02:14:46 26 4
gpt4 key购买 nike

我将 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 中显示它 -日志消息

04-09 11:07:40.053: D/BeaconParser(8765): This is not a matching Beacon advertisement. (Was expecting be ac. The bytes I see are: 0201061aff4c000215e2c56db5dffb48d2b060d0f5a71096e000000000c5020a000816f0ff640000000011094d696e69426561636f6e5f30303933370000 04-09 11:07:40.648: D/BluetoothAdapter(8765): onScanResult() - Device=F2:75:FA:D7:6E:19 RSSI=-45

那么,我如何将 BeaconConsumer 类与服务一起使用,以便在应用程序关闭或关闭时获取信标的所有详细信息。请帮忙

最佳答案

尝试在 onCreate 方法中添加 setBeaconLayout 行。 根据您启动服务的方式,onStart 方法可能不会被调用。 onCreate 方法总是被调用。

您可能还希望在这些方法中添加一些日志记录,以便您在故障排除期间充分了解服务的启动顺序。

关于android - 如何在android中使用服务实现BeaconConsumer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29530616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com