0

我正在遵循地理围栏指南,但我无法获得LocalBroadcastManager类别有效的意图。Intent 发送者发送 2 种具有相同类别的 Intent GeofenceUtils.CATEGORY_LOCATION_SERVICES

- 有行动GeofenceUtils.ACTION_GEOFENCES_ADDED

Intent broadcastIntent = new Intent();
String msg;
broadcastIntent.setAction(GeofenceUtils.ACTION_GEOFENCES_ADDED)
               .addCategory(GeofenceUtils.CATEGORY_LOCATION_SERVICES)
               .putExtra(GeofenceUtils.EXTRA_GEOFENCE_STATUS, msg);
LocalBroadcastManager.getInstance(mActivity).sendBroadcast(broadcastIntent);

- 有行动GeofenceUtils.ACTION_GEOFENCE_ERROR

Intent broadcastIntent = new Intent();
String msg;
broadcastIntent.setAction(GeofenceUtils.ACTION_GEOFENCE_ERROR)
               .addCategory(GeofenceUtils.CATEGORY_LOCATION_SERVICES)
               .putExtra(GeofenceUtils.EXTRA_GEOFENCE_STATUS, msg);
LocalBroadcastManager.getInstance(mActivity).sendBroadcast(broadcastIntent);

在接收器中,我想要一个IntentFilter按类别而不是按动作过滤意图,如下所示:

geofenceReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
    // Get extra data included in the Intent
    String message = intent.getStringExtra(GeofenceUtils.EXTRA_GEOFENCE_STATUS);
    Log.d(TAG, "geofenceReceiver got message: " + message);
}

IntentFilter intentFilter = new IntentFilter();
intentFilter.addCategory(GeofenceUtils.CATEGORY_LOCATION_SERVICES);
LocalBroadcastManager.getInstance(this).registerReceiver(geofenceReceiver, intentFilter);

onReceive永远不会触发。为什么?

4

1 回答 1

0

好的,我在这里找到了解决方案http://developer.android.com/reference/android/content/IntentFilter.html

匹配基于以下规则。请注意,要使 IntentFilter 匹配 Intent,必须满足三个条件:动作和类别必须匹配,并且数据(数据类型和数据方案+权限+路径,如果指定)必须匹配(请参阅 match(ContentResolver, Intent, boolean, String) 以获取有关数据字段如何匹配的更多详细信息)。

如果任何给定值与 Intent 动作匹配,则动作匹配;如果过滤器没有指定任何动作,那么它只会匹配不包含动作的 Intent。

如果 Intent 中的所有类别都与过滤器中给定的类别匹配,则类别匹配。过滤器中不在 Intent 中的额外类别不会导致匹配失败。请注意,与操作不同的是,没有类别的 IntentFilter 只会匹配没有任何类别的 Intent。

所以我必须将两个Actions 添加到IntentFilter

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(GeofenceUtils.ACTION_GEOFENCES_ADDED);
intentFilter.addAction(GeofenceUtils.ACTION_GEOFENCE_ERROR);
intentFilter.addCategory(GeofenceUtils.CATEGORY_LOCATION_SERVICES);
于 2014-11-28T10:00:55.237 回答