我希望在Google Awareness API“fence”触发时启动BroadcastReceiver或IntentService(取决于我的最终处理需要多长时间)。例如,也许我想知道在一天中激活一组信标栅栏的次数(假设我随身携带电话)。我发现的所有示例都显示了在代码中注册广播接收器,但我的理解是我需要在清单中注册广播接收器,以便操作系统在我的应用程序未运行时向其发送广播。更重要的是,意图ID似乎是一个自定义ID,所以我猜我必须通过代码至少一次在OS上注册它?
我猜我将不得不创建一个或多个测试应用程序以通过反复试验来解决这个问题,但是肯定会感谢任何试过这个并希望分享您的结果的人的回复!
答案 0 :(得分:5)
如果您在清单文件中指定BroadCastReceiver就足够了。
即使在声明Manifest <receiver>
条目后,您也不需要在代码中注册它。试想一下平台如何处理活动你只在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
中的更多信息