2013-11-15 2 views
1

Я пытаюсь настроить оповещения о приближении ниже мой код, но его не стрелять по всемуAndroid Proximity предупреждения не стреляя

Intent intent = new Intent(ACTION_PROXIMITY_ALERT); 
pendingIntent = PendingIntent.getBroadcast(GMapsActivity.this, 0, intent, 0); 
locationManager.addProximityAlert(mNavigationDatas.get(CURRENT_INDEX).startCordinates.latitude, 
         mNavigationDatas.get(CURRENT_INDEX).startCordinates.longitude, 100f, -1, pendingIntent); 
IntentFilter filter = new IntentFilter(ACTION_PROXIMITY_ALERT); 
registerReceiver(new ProximityBroadcastListener(), filter); 

Права доступа к следующему

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

Я посылаю Mock местоположение для тестирования на реальном устройстве Android v4.1.2 макет местоположения следует за правильным путем, но прослушиватель вещания не называется

public class ProximityBroadcastListener extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     final String key = LocationManager.KEY_PROXIMITY_ENTERING; 
     final Boolean entering = intent.getBooleanExtra(key, false); 

     if (entering) { 
      String instruction = mNavigationDatas.get(CURRENT_INDEX).drivingInstuctions; 
      instruction = instruction.replaceAll("<[^>]*>", ""); 
      Log.e("", instruction); 
      tts.speak(instruction, TextToSpeech.QUEUE_FLUSH, null); 
      Toast.makeText(context, "entering", Toast.LENGTH_SHORT).show(); 
     } else { 
      locationManager.removeProximityAlert(pendingIntent); 
      CURRENT_INDEX++; 
      locationManager.addProximityAlert(mNavigationDatas.get(CURRENT_INDEX).startCordinates.latitude, 
        mNavigationDatas.get(CURRENT_INDEX).startCordinates.longitude, 100f, -1, pendingIntent); 
      Toast.makeText(context, "exiting", Toast.LENGTH_SHORT).show(); 
     } 
    } 

Спасибо Saurabh

+0

Можете ли вы прикрепить бревна, когда вы отправляете фальшивое местоположение? – iago

+0

Я использую те же координаты, что и для определения местоположения, которое я использовал для отображения маршрута, и указатель myLocation перемещается по тому же пути, и я отправляю ложное местоположение через другое приложение. – ingsaurabh

+0

. Когда вы отправляете ложное местоположение через другое приложение, зарегистрированный слушатель или он становится незарегистрированным, когда это приложение идет в фоновом режиме? – iago

ответ

2

Во-первых, я бы предложил зарегистрировать BroadcastReceiver перед добавлением предупреждения о близости. Если ваше устройство уже находится в этом месте, оно может вызвать намерение, прежде чем ваш приемник будет готов его прослушать.

Возможно, вы также захотите проверить правильность регистрации вашего приемника, вручную включив PendingIntent, например, через AlarmManager, уведомление или просто нажав кнопку.

Если это не работает, рассмотрите эксперименты с физическим устройством, так как есть проблемы с событиями размещения на эмуляторе. Например, due to a bug in the emulator, смещение по времени во входящих местах установлено в полночь, поэтому ваши критерии местоположения, скорее всего, не совпадут.

Смежные вопросы