如何在android中实现beaconsumer和service
我正在使用Beaconsumer进行活动,效果很好。当我用服务实现BeaconConsumer时,它不起作用如何在android中实现beaconsumer和service,android,service,ibeacon-android,background-service,Android,Service,Ibeacon Android,Background Service,我正在使用Beaconsumer进行活动,效果很好。当我用服务实现BeaconConsumer时,它不起作用 SimpleService extends Service implements BeaconConsumer { protected static final String TAG = "MyBeaconService"; String UUID = "EXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; private BeaconManager mBe
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();
}
}
SimpleService扩展服务实现beaconsumer{
受保护的静态最终字符串标记=“MyBeaconService”;
字符串UUID=“EXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”;
私人信标管理人;
@凌驾
公共IBinder onBind(意图arg0){
返回null;
}
@凌驾
public void onCreate(){
super.onCreate();
mBeaconManager=BeaconManager.getInstanceForApplication(此应用程序);
mBeaconManager.setDebug(true);
mBeaconManager.bind(这个);
Log.e(“,”onCreate“);
}
@凌驾
公共无效启动(Intent Intent,int startId){
Log.i(标记“onStart called”);
MBeAcon经理
.getBeaconParsers()文件
.add(新BeaconParser()
.立根布置(“m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25”);
mBeaconManager.bind(这个);
}
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
i(标记“onStartCommand called”);
返回开始时间;
}
@凌驾
公共空间{
super.ondestory();
Log.i(标记“服务已销毁…”);
mBeaconManager.unbind(此);
}
@凌驾
beacerviceconnect()上的公共无效{
Log.e(“,”onbeacerviceconnect”);
mBeaconManager.setMonitorNotifier(新的MonitorNotifier(){
@凌驾
公共区域(区域){
试一试{
Log.e(标签“didEnterRegion”);
MBeaconsistenregion(区域)Startrangbeaconregion经理;
}捕获(远程异常){
e、 printStackTrace();
}
}
@凌驾
公共区域(区域){
试一试{
Log.e(标签“didExitRegion”);
MBeaconsistenregion(区域)停车场管理人员;
}捕获(远程异常){
e、 printStackTrace();
}
}
@凌驾
公共无效区域(国际一级,区域){
}
});
mBeaconManager.setRangeNotifier(新的RangeNotifier(){
@凌驾
公共范围信标区域(收集信标,
(区域){
用于(信标一号信标:信标){
Log.e(“,“setRangeNotifier”);
Log.e(“,”ID 1“+oneBeacon.getId1());
Log.e(“,”ID 2“+oneBeacon.getId2());
Log.e(“,”ID 3“+oneBeacon.getId3());
Log.e(标记“distance:+oneBeacon.getDistance());
Log.e(“”,
“oneBeacon.getBluetoothAddress():-”
+oneBeacon.getBluetoothAddress());
}
}
});
试一试{
mBeaconManager.StartMonitoringBeaconsisnRegion(新区域(
“myBeaons”,Identifier.parse(UUID),null,null);
mBeaconManager.StarTrangBeaconRegion(新区域(“myBeaons”),
parse(UUID,null,null));
}捕获(远程异常){
e、 printStackTrace();
}
}
这将不起作用。它没有给出信标的详细信息,而是在logcat中显示-
Logcat消息
04-09 11:07:40.053:D/BeaconParser(8765):这不是匹配的信标播发。(应为ac。我看到的字节是:020106AFF4C000215E2C56DB5DFFB48D2B060D0F5A71096E000000000C5020A000816F0FF640000000011094D696E6946163F6E5F30303933370000
04-09 11:07:40.648:D/BluetoothAdapter(8765):onScanResult()-Device=F2:75:FA:D7:6E:19 RSSI=-45
因此,我如何在服务中使用BeaconConsumer类,以便在应用程序关闭或未关闭时获取beacon的所有详细信息。请帮助尝试在
onCreate
方法中添加setBeaconLayout
行。根据您启动服务的方式,可能不会调用onStart
方法。满足onCreate
的要求hod总是接到电话。
您可能还希望在这些方法中添加一些日志记录,以便在故障排除期间完全了解服务的启动顺序