0

나는 geofencing guidelines을 따르고 있으며 범주가있는 의도에 대해 LocalBroadcastManager을 얻을 수 없습니다. 의도 보낸 사람이 같은 범주 GeofenceUtils.CATEGORY_LOCATION_SERVICES와 텐트 2 종류를 보냅니다의도 LocalBroadcastManager를 사용하여 범주별로 필터링

가진 - 동작이 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은 실행되지 않습니다. 왜?

답변

0

확인은 여기 http://developer.android.com/reference/android/content/IntentFilter.html 해결책을 발견

일치는 다음과 같은 규칙을 기반으로합니다. 인 텐트와 일치하는 IntentFilter의 경우 세 조건에이 있어야하며 동작 및 범주가 일치해야하며 데이터 (데이터 유형과 데이터 스키마 + authority + path가 모두 지정된 경우)가 일치해야합니다 (match (ContentResolver, Intent, boolean, String)을 사용하여 데이터 필드가 일치하는 방식을 자세히 설명합니다.

주어진 값 중 하나가 의도 동작과 일치하면 작업이 일치합니다. 필터가 동작을 지정하지 않으면 동작을 포함하지 않는 인 텐트에만 일치합니다.

인 텐트의 모든 범주가 ​​필터에 지정된 범주와 일치하면 범주가 일치합니다. 인 텐트에없는 필터의 추가 카테고리는 일치를 실패시키지 않습니다. 액션과 달리 카테고리가없는 IntentFilter는 카테고리가없는 인 텐트와 만 일치합니다.

그래서 나는 IntentFilter에 모두 Action의를 추가 할 수 있습니다

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(GeofenceUtils.ACTION_GEOFENCES_ADDED); 
intentFilter.addAction(GeofenceUtils.ACTION_GEOFENCE_ERROR); 
intentFilter.addCategory(GeofenceUtils.CATEGORY_LOCATION_SERVICES); 
관련 문제