本文介绍了信标在Android的服务未检出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Altbeacon库(稳定版2.1.4)来检测信标。如果我在活动中做到这一点,我没有问题检测它们。不过,我不能得到这个从服务工作。下面是我得到了什么:

 包com.ibeacontest.android;
进口java.util.Collection中;进口org.altbeacon.beacon.Beacon;
进口org.altbeacon.beacon.BeaconConsumer;
进口org.altbeacon.beacon.BeaconManager;
进口org.altbeacon.beacon.BeaconParser;
进口org.altbeacon.beacon.Identifier;
进口org.altbeacon.beacon.RangeNotifier;
进口org.altbeacon.beacon.Region;进口android.app.Service;
进口android.content.Intent;
进口android.os.IBinder;
进口android.os.RemoteException;
进口android.util.Log;
公共类TestBestzBeaconService扩展服务实现BeaconConsumer
{    私人BeaconManager beaconManager;
    私人最终字符串BEACON_UUID =11687109-915f-4136-a1f8-e60ff514f96d
    私人最终诠释BEACON_MAJOR = 3;    @覆盖
    公共无效的onCreate(){
        super.onCreate();
        L.P(以TestBestzBeaconService的onCreate());
    }    @覆盖
    公众的IBinder onBind(意向意图){
        返回null;
    }    @覆盖
    公众诠释onStartCommand(意向意图,诠释标志诠释startId){
        L.P(在TestBestzBeaconService onStartCommand());        beaconManager = BeaconManager.getInstanceForApplication(本);
        beaconManager.bind(本);        // iBeacons?
        BeaconParser BP0 =新BeaconParser();
        bp0.setBeaconLayout(M:2-3 = 0215,I:4-19,I:20-21,I:22-23页:24-24);
        。beaconManager.getBeaconParsers()加(BP0);        // Bluecats?
        BeaconParser BP1 =新BeaconParser();
        bp1.setBeaconLayout(M:2-3 = 0201,I:28-29页:24-24);
        。beaconManager.getBeaconParsers()加(BP1);        返回super.onStartCommand(意向,旗帜,startId);
    }    @覆盖
    公共无效的onDestroy(){
        L.P(以TestBestzBeaconService的onDestroy());
        beaconManager.unbind(本);
    }
    @覆盖
    公共无效onBeaconServiceConnect(){        L.P(以TestBestzBeaconService onBeaconServiceConnect());        beaconManager.setRangeNotifier(新RangeNotifier(){
            @覆盖
            公共无效didRangeBeaconsInRegion(收集和LT;烽火台>为arg0,ARG1区){
                L.P(以TestBestzBeaconService - 匿名didRangeBeaconsInRegion());
            }
        });        地区区域=新区域(myregion,Identifier.parse(BEACON_UUID),​​Identifier.fromInt(BEACON_MAJOR),NULL); //        尝试{
            beaconManager.startRangingBeaconsInRegion(区);
        }赶上(RemoteException的E){
            L.P(在TestBestzBeaconService onBeaconServiceConnect(),RemoteException的!);
        }    }    私有静态L级
    {
        公共静态无效的P(String s)将{
            Log.i(信标,S);
        }
    }}

我从活动中调用该如此:

 公共类MainActivity延伸活动{    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);        startService(新意图(这一点,TestBestzBeaconService.class));
    }}

日志输出我得到的是:

  9月三日日至19日:56:40.233:I /灯塔(25210):在TestBestzBeaconService的onCreate()
9月3日至19日:56:40.233:I /灯塔(25210):在TestBestzBeaconService onStartCommand()
9月3日至19日:56:40.566:I /灯塔(25210):在TestBestzBeaconService onBeaconServiceConnect()

添加到部分 AndroidManifest

 <! - 集所需的AltBeacon SDK  - >
<使用许可权的android:NAME =android.permission.BLUETOOTH/>
<使用许可权的android:NAME =android.permission.BLUETOOTH_ADMIN/>

应用程序内标签:

 <! - 集所需的AltBeacon SDK  - >
<服务机器人:名字=org.altbeacon.beacon.service.BeaconService/>
<服务机器人:名字=com.ibeacontest.android.TestBestzBeaconService/>

...但没有信标或 didRangeBeaconsInRegion 日志输出的迹象。任何指针?


解决方案

据我所知监控仅在工作在后台测距没有。尝试首先启动监控,然后立即当你输入监控启动测距

是这样的:

  //设置监控
mBeaconManager.setMonitorNotifier(新MonitorNotifier(){
    @覆盖
    公共无效didEnterRegion(地区区域){
        Log.d(TEST,输入的航标区);
        //开始Raning只要你发现一盏明灯
        尝试{
            mBeaconManager.startRangingBeaconsInRegion(mRegion);
        }赶上(RemoteException的E){
            e.printStackTrace();
        }
    }
});//设置测距
mBeaconManager.setRangeNotifier(新RangeNotifier(){
    @覆盖
    公共无效didRangeBeaconsInRegion(最终收集和LT;烽火台>标,地区区){
           如果(beacons.size()大于0){
                Log.i(TAG,P(在TestBestzBeaconService - 匿名
            }
    }
});尝试
{
    //开始监测
    mBeaconManager.startMonitoringBeaconsInRegion(mRegion);
}赶上(RemoteException的E)
{
    e.printStackTrace();
}

不要忘了添加航标服务清单

 <服务
        机器人:名字=org.altbeacon.beacon.service.BeaconService
        机器人:启用=真
        机器人:出口=真
        机器人:isolatedProcess =假
        机器人:标签=灯塔>< /服务>
       <服务
        机器人:名字=org.altbeacon.beacon.BeaconIntentProcessor
        机器人:启用=真正的>< /服务>

这篇关于信标在Android的服务未检出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-19 14:30