android:没有检测到beacon

时间:2015-12-11 15:12:17

标签: android ibeacon

我的活动只包含onCreate()

中的单行
startService(new Intent(this, MyBeaconService.class));

MyBeaconService.class

public class MyBeaconService extends Service implements IBeaconConsumer{

    private IBeaconManager iBeaconManager = IBeaconManager
            .getInstanceForApplication(this);

    public MyBeaconService() {
        Log.i("MyBeaconService", "MyBeaconService");
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw null;
    }

    @Override
    public void onIBeaconServiceConnect() {
        Log.i("MyBeaconService", "onIBeaconServiceConnect");
        iBeaconManager.setMonitorNotifier(new MonitorNotifier() {
            @Override
            public void didEnterRegion(Region region) {
                Log.e("BeaconDetactorService", "didEnterRegion");
                 Log.i("BeaconDetactorService", "I just saw an iBeacon for the first time!");

                Intent dialogIntent = new Intent(MyBeaconService.this, MyAdActivity.class);
                dialogIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(dialogIntent);
            }

            @Override
            public void didExitRegion(Region region) {
                Log.e("BeaconDetactorService", "didExitRegion");
                // logStatus("I no longer see an iBeacon");
            }

            @Override
            public void didDetermineStateForRegion(int state, Region region) {
                Log.e("BeaconDetactorService", "didDetermineStateForRegion");
                // logStatus("I have just switched from seeing/not seeing iBeacons: "
                // + state);
            }

        });

        try {
            iBeaconManager.startMonitoringBeaconsInRegion(new Region(
                    "myMonitoringUniqueId", null, null, null));
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        Log.i("MyBeaconService", "onCreate");

        iBeaconManager.bind(this);
    }
}

问题是我无法检测到任何信标..我的意思是.. didEnterRegion方法永远不会被调用..

请帮帮我..

感谢。

1 个答案:

答案 0 :(得分:2)

一些提示:

  • 确保您的移动设备可以使用Locate等现成应用程序查看您的信标。

  • 确保您的调试行显示正在调用onIBeaconServiceConnect。您的服务是否已经开始?

  • 如果调用上述方法,请尝试使用以下代码打开库中的低级调试:iBeaconManager.setDebug(true)并粘贴您在问题中看到的LogCat中的输出。

  • 您正在使用的库已于2014年7月被Android Beacon Library弃用并取而代之。如果您打算继续使用信标进行开发,则切换到较新的库是明智的。它具有非常相似的语法和设计,并获得错误修复和持续支持。它还可以在开箱即用的情况下检测背景中的信标,而无需构建自己的服务。

注意:我已修改此答案以删除有关方法链接的提示,在这种情况下不应该这样做。

完全披露:我是Android Beacon Library开源项目的首席开发人员,也是问题中代码使用的原始库的作者。