Ich arbeite an einem Widget, das den aktuellen GPS-Standort abruft und diesen Wert an eine entfernte PHP-Seite übergibt, um die Informationen zu erhalten und sie im Widget anzuzeigen. Das ist es, was ich versuche zu tun.
Ich habe Probleme bei der Implementierung des Location Listeners für das AppWidget. Es wird nicht mit dem aktuellen Standort aktualisiert und zeigt das anfängliche Widget an, d.h. "Widget wird geladen" (Hier habe ich diesen Text eingefügt).
Können wir einen Location Listener für AppWidgetProvider implementieren?
Oder
Kannst du mir eine mögliche Lösung vorschlagen, um den GPS-Standort im App Widget zu erhalten?
Ich habe alle erforderlichen Berechtigungen in der Manifestdatei platziert.
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) {
// Um ANR-Timeouts zu vermeiden, führen wir das Update in einem Service aus
context.startService(new Intent(context, UpdateService.class));
}
public static class UpdateService extends Service {
// GPS-Listenerklasse
LocationListener gpsListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Log.w("GPS", "Gestartet");
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", "Standort geändert", null);
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
if (status == 0)// Nicht verfügbar
{
} else if (status == 1)// Versuche zu verbinden
{
} else if (status == 2) {// Verfügbar
}
}
};
// In der Startmethode des Dienstes melde ich mich für GPS-Updates an
@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(),"Breite: " + String.valueOf(lat) + "\n Länge: "+ String.valueOf(lng), Toast.LENGTH_LONG).show();
}
// Widget-Update für heute erstellen
RemoteViews updateViews = buildUpdate(this);
// Widget-Update für diesen Widget auf dem Startbildschirm auslösen
ComponentName thisWidget = new ComponentName(this,InKakinadaWidget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, updateViews);
}
public RemoteViews buildUpdate(Context context) {
// Hier aktualisiere ich die RemoteView
return updateViews;
}
@Override
public IBinder onBind(Intent intent) {
// Wir müssen uns nicht an diesen Dienst binden
return null;
}
}
}`
Vielen Dank im Voraus...
Mit freundlichen Grüßen, Raghavendra K.