Frage

ich auf einem Widget arbeite, die die aktuelle GPS-Position erhalten werden und diesen Wert auf Remote-PHP-Seite übergeben, um die Informationen zu bekommen und es im Widget angezeigt werden soll. Das ist, was ich versuche zu tun.

Ich bin vor Problem während für appWidget Location Listener implementieren. Es ist nicht mit dem aktuellen Standort zu aktualisieren und es ist die Anfangs-Widget heißt „Laden Widget“ zeigt (Hier habe ich diesen Text)

Können wir Location Listener für AppWidgetProvider implementieren?
  oder in    Können Sie mir die mögliche Lösung für GPS-Position in App Widget bekommen?

Ich legte alle erforderlichen Berechtigungen in Manifest-Datei.
Hier ist mein Code-Schnipsel:

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;
    }

}
}

Vielen Dank im Voraus ...

Mit freundlichen Grüßen, Raghavendra K.

War es hilfreich?

Lösung

Haben Sie dieses Problem in dem Emulator oder auf einem Gerät? Wenn auf dem Emulator, stellen Sie sicher, dass Sie DDMS verwenden, um eine GPS-Position zu setzen. Aber die einfachste Sache zu tun sein könnte Ihren Code auf einem Gerät ausgeführt werden, um zu sehen, ob Sie erhalten GPS-Updates auf diese Weise.

Andere Tipps

Das Problem, das ich sehe, ist, dass Sie curLocation in onStart () zu prüfen, direkt nach dem Aufruf requestLocationUpdates () versuchen. LocationManager.requestLocationUpdates () ist asynchron, wird Ihre Location Bedeutung erst nach onStart aufgerufen zurück () zurückgegeben hat. Haben Sie Ihre Location die Benutzeroberfläche aktualisiert werden, nachdem er die Position erhält, nicht versuchen und tun es in onStart.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top