Проблема при реализации слушателя местоположения в Android AppWidget

StackOverflow https://stackoverflow.com/questions/1801866

Вопрос

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

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

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

Я поместил все необходимые разрешения в файл манифеста.
Вот мой фрагмент кода:
<Код>

<код>
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;
    }

}
}

<код>

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

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

Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top