如何使用Android中的Eddystone唤醒应用程序

如何使用Android中的Eddystone唤醒应用程序,android,beacon,wakeup,Android,Beacon,Wakeup,我想用Eddystone唤醒我的应用程序,但是当我的手机接近Eddystone的信号时,什么也没发生。我是用安卓信标库做的。它是这样的: ` onCreate(){ mBeaconManager = BeaconManager.getInstanceForApplication(this); // Detect the main Eddystone-UID frame: mBeaconManager.getBeaconParsers().add(new Beaco

我想用Eddystone唤醒我的应用程序,但是当我的手机接近Eddystone的信号时,什么也没发生。我是用安卓信标库做的。它是这样的:

    `
onCreate(){
    mBeaconManager = BeaconManager.getInstanceForApplication(this);
    // Detect the main Eddystone-UID frame:
    mBeaconManager.getBeaconParsers().add(new BeaconParser().
            setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
    mBeaconManager.setBackgroundBetweenScanPeriod(50);
    mBeaconManager.setBackgroundScanPeriod(50);
    mBeaconManager.setForegroundBetweenScanPeriod(50);
    mBeaconManager.setForegroundScanPeriod(50);
    mBeaconManager.setBackgroundBetweenScanPeriod(50);
    mBeaconManager.setForegroundScanPeriod(50);
    mBeaconManager.applySettings();
    mBeaconManager.bind(this);
}`

Android.xml:

<application 
    android:name="com.example.MyApplicationName"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <!-- Note:  the singleInstance below is important to keep two copies of your activity from getting launched on automatic startup -->
    <activity
        android:launchMode="singleInstance"  
        android:name="com.example.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
    <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

以前有没有人做过,请帮我做一下。谢谢

是的,可以使用Android Beacon库唤醒带有Eddystone UID的应用程序。它的工作方式与AltBeacon或iBeacon相同

实现这一点的最简单方法是从以下参考应用程序开始:

您需要做的唯一修改是为Eddystone UID添加信标解析器:

mBeaconManager.getBeaconParsers().add(new BeaconParser().
        setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
查看问题中的代码,将扫描周期设置为50将是一个问题,因为50毫秒的时间不足以可靠地检测到信标。我将删除这些自定义扫描周期配置并使用默认值

以下是一些提示:

在尝试让你的应用程序在后台工作之前,确保你能在前台检测到信标。 确保您的应用程序正在使用参考应用程序中的RegionBootstrap,如后台启动应用程序部分所述 在测试背景检测时,请确保在开始测试之前已超出该区域。要做到这一点,请将你的应用程序带到前台,并关闭你的信标30秒。这将确保您不在该区域内。在开始背景检测测试之前,请务必执行此操作。 如果从任务切换程序中关闭应用程序,请等待5分钟,以确保在开始测试之前在后台重新启动应用程序。 要现实地了解在背景中检测信标可能需要多长时间。阅读更多信息。
你好,大卫,谢谢你的帮助。你们真的帮了我很多忙。我很感激。我运行你给我的应用程序:。我能很好地捕捉到埃迪斯通的信号。我得到了进入和退出信号的日志。但我不能唤醒我的应用程序,只有一次。我添加了您指给我的代码:beaconManager.getBeaconParsers.addnew BeaconParser。setbeaconlayoutbaconparser.EDDYSTONE\u UID\u布局;其中:Region Region=newregionbackgroundregion,null,null,null;regionBootstrap=新regionBootstrap此区域;你能告诉我我还能做什么吗。非常感谢!!!!示例代码将在信标第一次进入该区域时自动启动Main活动。下次它将发送本地通知。这样做是为了演示。如果您希望它每次都启动活动,只需更改以下代码:If!haveDetectedBeaconsInceBoot{Log.dTAG,自动启动MainActivity;..}改为if true{Log.dTAG,自动启动MainActivity;..}。这将使其始终在检测时启动活动。嗨,大卫,如果应用程序在后台运行,我可以启动该应用程序。但是,如果我在安卓系统中通过清除内存功能杀死它,它将不会显示did enter region的日志或运行我的服务。请告诉我,如果Android Beacon没有在后台运行,或者在系统启动后从未启动,应用程序是否会自动运行。非常感谢,并带着我最好的祝愿。它正是为了做到这一点而设计的。您的手机型号和操作系统版本是什么?