Ожидающие намерения не запущены

Я пытаюсь реализовать механизм геозоны, при котором геозона отслеживается, и как только пользователь выходит из текущей геозоны, текущие координаты используются для создания новой геозоны, и инициируется запрос БД для получения некоторых данных.

Моя проблема в том, что ожидающее намерение никогда не срабатывает.

Из журналов я вижу, что геозоны добавляются в клиент местоположения. Однако никакие ожидающие намерения не запускаются при изменении местоположения (я установил радиус забора на 2 м и прошел более 100 м). Что-то не так в том, как я объявил службу намерений?

Вот класс обслуживания намерений.

public class GeoFenceIntentService extends IntentService{
    private static final String mIntentName = "GeoFenceIntentService";

    public GeoFenceIntentService() {
        super(mIntentName);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        int transitionType = LocationClient.getGeofenceTransition(intent);
        Log.e(TAG,"Inside fence handler");
        if(transitionType == Geofence.GEOFENCE_TRANSITION_EXIT){
            //Query DB here with current co-ords
            //create new GeoFence
            Location location = LocationHelper.getInstance(mContext).getLastLocation();
            mLat = String.valueOf(location.getLatitude());
            mLong = String.valueOf(location.getLongitude());
            addGeofenceToMonitor(location);
            queryDb();
        }
    }       
}

Также здесь я добавляю ожидающие намерения и геозону в клиент местоположения.

addGeofenceToMonitor(Location location){
    List<Geofence> list = new ArrayList<Geofence>();
    list.add(getNewGeofence(location.getLatitude(), location.getLongitude()));
    PendingIntent pendingIntent = PendingIntent.getService(mContext, 0, 
                                        new Intent(mContext,GeoFenceIntentService.class), PendingIntent.FLAG_UPDATE_CURRENT);

    OnRemoveGeofencesResultListener removeListener = new OnRemoveGeofencesResultListener() {

        @Override
        public void onRemoveGeofencesByRequestIdsResult(int statusCode, String[] requestIDs) {
            //To be used
        }

        @Override
        public void onRemoveGeofencesByPendingIntentResult(int statusCode,PendingIntent pendingIntent) {
            //Not used
        }
    };
    LocationHelper.getInstance(mContext).removeGeoFence(mGeofenceRequestIDs, removeListener);

    OnAddGeofencesResultListener addListener = new OnAddGeofencesResultListener() {

        @Override
        public void onAddGeofencesResult(int statusCode, String[] geofenceRequestIds) {
            if(statusCode != LocationStatusCodes.SUCCESS){
                //handle error cases
            }
            else
                Log.i(TAG, "Successfully added Geofence "+geofenceRequestIds[0]+" for monitoring");
        }
    };
    LocationHelper.getInstance(mContext).addGeoFence(list, pendingIntent, addListener);
}

Вот фрагмент из файла манифеста

<service
android:name="com.myexample.sample.GeoFenceIntentService"
android:label="@string/app_name"
android:exported="true">
</service> 

person Traxex1909    schedule 23.01.2014    source источник
comment
Пробовали ли вы использовать BroadcastReceiver в качестве цели вашего PendingIntent вместо Service? Если нет, попробуйте это и посмотрите, вызывается ли onReceive().   -  person David Wasser    schedule 27.01.2014


Ответы (2)


Прочитайте это. Вы проверили круг оценки положения, который вы получаете? Вы можете использовать приложение для имитации местоположения, чтобы установить положение, а также круг точности. Ваша геозона может быть слишком маленькой, чтобы вместить круг вашего положения, и поэтому события не запускаются.

person Dilip    schedule 06.02.2014

Android GeoFences никогда не включают GPS (потому что их API ужасен, а энергопотребление устройства уже выходит из-под контроля). Вы должны настроить свои геозоны, а затем постоянно опрашивать GPS отдельно, если вы хотите использовать геозоны через GPS.

Обработчик опроса GPS может быть нулевым, опрос существует только для того, чтобы передавать точную информацию в их ужасный API местоположения и, в свою очередь, запускать заборы.

person stealthwang    schedule 11.03.2014