Проблема при реализации слушателя местоположения в Android AppWidget - PullRequest
3 голосов
/ 26 ноября 2009

Я работаю над виджетом, который получит текущее местоположение GPS и передаст это значение на удаленную страницу PHP, чтобы получить информацию и отобразить ее в виджете. Это то, что я пытаюсь сделать.

Я столкнулся с проблемой при реализации Location Listener для appWidget. Он не обновляется с помощью текущего местоположения и показывает начальный виджет, т. Е. «Виджет загрузки» (здесь я поместил этот текст)

Можем ли мы реализовать прослушиватель местоположения для AppWidgetProvider?
Или
Можете ли вы предложить мне возможное решение для получения местоположения GPS в App Widget?

Я поместил все необходимые разрешения в файл манифеста.
Вот мой фрагмент кода:
</p> <pre><code>public class test extends AppWidgetProvider { static LocationManager locMan; static Location curLocation; static Boolean locationChanged; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) { // To prevent any ANR timeouts, we perform the update in a service context.startService(new Intent(context, UpdateService.class)); } public static class UpdateService extends Service { // GPS Listener Class LocationListener gpsListener = new LocationListener() { public void onLocationChanged(Location location) { // Log.w("GPS", "Started"); if (curLocation == null) { curLocation = location; locationChanged = true; } if (curLocation.getLatitude() == location.getLatitude() && curLocation.getLongitude() == location.getLongitude()) locationChanged = false; else locationChanged = true; curLocation = location; if (locationChanged) locMan.removeUpdates(gpsListener); } public void onProviderDisabled(String provider) { } public void onProviderEnabled(String provider) { // Log.w("GPS", "Location changed", null); } public void onStatusChanged(String provider, int status, Bundle extras) { if (status == 0)// UnAvailable { } else if (status == 1)// Trying to Connect { } else if (status == 2) {// Available } } }; // In service start method, I am registering for GPS Updates @Override public void onStart(Intent intent, int startId) { locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if (locMan.isProviderEnabled(LocationManager.GPS_PROVIDER)) { locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,20000, 1, gpsListener); } else { this.startActivity(new Intent("android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS")); } if (curLocation != null) { double lat = curLocation.getLatitude(); double lng = curLocation.getLongitude(); Toast.makeText(getBaseContext(),"Lat : " + String.valueOf(lat) + "\n Long : "+ String.valueOf(lng), Toast.LENGTH_LONG).show(); } // Build the widget update for today RemoteViews updateViews = buildUpdate(this); // Push update for this widget to the home screen ComponentName thisWidget = new ComponentName(this,InKakinadaWidget.class); AppWidgetManager manager = AppWidgetManager.getInstance(this); manager.updateAppWidget(thisWidget, updateViews); } public RemoteViews buildUpdate(Context context) { // Here I am updating the remoteview return updateViews; } @Override public IBinder onBind(Intent intent) { // We don't need to bind to this service return null; } } }

Заранее спасибо ...

С уважением, Рагхавендра К.

Ответы [ 2 ]

8 голосов
/ 27 ноября 2009

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

3 голосов
/ 26 ноября 2009

У вас есть эта проблема в эмуляторе или на устройстве? Если на эмуляторе, убедитесь, что вы используете DDMS, чтобы установить местоположение GPS. Но самое простое, что можно сделать, это запустить код на устройстве, чтобы узнать, получаете ли вы обновления GPS таким образом.

...