6

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

我猜我将不得不创建一个或多个测试应用程序来通过反复试验来解决这个问题,但肯定会感谢任何尝试过这个并希望分享你的结果的人的来信!

4

1 回答 1

5

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

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

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

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

扩展 BroadcastReceiver 类。

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中的更多信息

于 2016-10-05T21:14:50.367 回答