Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中实现beaconsumer和service_Android_Service_Ibeacon Android_Background Service - Fatal编程技术网

如何在android中实现beaconsumer和service

如何在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

我正在使用Beaconsumer进行活动,效果很好。当我用服务实现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();
    }

}
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总是接到电话。

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