2013-07-25 4 views
2

Я написал код ниже, но он не работает. Кто-нибудь может мне помочь? Я просто хочу пассивно получать изменения местоположения. Я хочу запускать свое приложение в фоновом режиме всякий раз, когда он получает широковещательную передачу с измененной системой, но здесь, когда этот код не отображает журнал.Как получить системную трансляцию при изменении местоположения?

Вот мой Manifest

<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<receiver android:name=".LocationReceiver" 
       android:enabled="true" >   
    <intent-filter> 
     action android:name="android.location.PROVIDERS_CHANGED"    
     </intent-filter> 
</receiver> 

Не получение журнала

 public class LocationReceiver extends BroadcastReceiver { 
    public static final String PROVIDERS_CHANGED_ACTION="android.location.PROVIDERS_CHANGED"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    if (intent.getAction().equals(PROVIDERS_CHANGED_ACTION)) { 
     Log.d("---------log--------", "Location Changed"); 
     myAction(); 

    } 
} 
+0

Просьба уточниться. «Не работает», каким образом? –

+0

Я решил эту проблему. Конечно, ее нелегко получить системную трансляцию всякий раз, когда происходит изменение местоположения, но с использованием CWAC LocationPoller https://github.com/commonsguy/cwac-locpoll. Я могу передавать широковещательную рассылку, чтобы местоположение могло быть найденным. – Livin

ответ

2

Чтобы получить обновления местоположения, первым реализовать интерфейс местоположения слушателя.

public class LocationListeners implements LocationListener { 

@Override 
public void onLocationChanged(Location loc) { 
    // TODO Auto-generated method stub 
    Log.e("______", "location: " + loc.getTime() + " provider:" + loc.getProvider()); 
} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 
    Log.e("_______", "disabled: " + provider); 
} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 
    Log.e("_______", "enable: " + provider); 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 
    Log.e("________", "privider: " + provider + " status changed:" 
      + String.valueOf(status) + " extras: " 
      + extras.getInt("satellites")); 

} 

} 

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

locListener = new LocationListeners(); 
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
lm.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, locListener); 

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

+0

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

+0

Изменения местоположения не передаются. Вы должны реализовать интерфейс прослушивателя местоположения и зарегистрировать его с помощью диспетчера службы местоположения. Вы пытаетесь создать широковещательный приемник, который не будет работать. Вы получаете трансляции только тогда, когда провайдер меняет (GPS на сеть или что-то еще), и местоположение не передается. Опрос местоположения (от обычного человека) будет активно запрашивать местоположение с фиксированными интервалами. Это требуется только в том случае, если вам нужно место с фиксированными интервалами, даже если другое не запрашивает местонахождение. Пассивный слушатель не будет активно запрашивать, но будет сообщать ваше приложение, когда ... contd .. –

+0

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

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