Google 认知度 Api 事件,而应用不是 运行

Google Awareness Api events while app isn't running

我希望在 Google Awareness API "fence" 触发时启动 BroadcastReceiver 或 IntentService(取决于我的最终处理需要多长时间)。例如,也许我想知道一天中我激活了多少次信标栅栏(假设我随身携带 phone)。我发现的所有示例都显示在代码中注册广播接收器,但我的理解是我需要在清单中注册一个广播接收器,以便 OS 在我的应用程序不存在的情况下向其发送广播t运行。更重要的是,意图 ID 似乎是一个自定义 ID,所以我想我必须至少通过代码向 OS 注册一次?

我想我将不得不创建一个或多个测试应用程序来通过反复试验来解决这个问题,但是非常感谢任何尝试过此方法并愿意分享您的结果的人的来信!

如果您在 Manifest 文件中指定 BroadCastReceiver 就足够了。

即使在声明了 Manifest <receiver> 条目之后,您也不必在代码中注册它。想想平台如何处理你只在清单文件中注册它的活动(如果不是我们得到 ActivityNotFoundException),广播也可以只在清单文件中注册。

您需要像这样声明接收者:

<receiver android:name=".MyFenceReceiver" >
   <intent-filter>
     <action android:name="android.intent.action.FENCE_RECEIVER_ACTION" />
    </intent-filter>
</receiver>

扩展 BroadcastReceiver class。

public class MyFenceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    FenceState fenceState = FenceState.extract(intent);

    if (TextUtils.equals(fenceState.getFenceKey(), "geofence")) {
        switch(fenceState.getCurrentState()) {
            case FenceState.TRUE:

                break;
            case FenceState.FALSE:

                break;
            case FenceState.UNKNOWN:

                break;
        }
    }
}
}

更多信息见https://developer.android.com/guide/topics/manifest/receiver-element.html