Ich habe einige gemeinsame Einstellungen (Breite, Länge), auf die ich von einem Service zugreifen möchte, der nicht von Activity abgeleitet ist.Probleme bei der Verwendung von SharedPreferences für einen Service (getPreferences gibt es für einen Service nicht)
Insbesondere, wenn ich versuche, auf getPreferences zuzugreifen, existiert diese Funktion nicht auf einem Dienst. Mein Code ist unter
geschrieben Mein Ziel hier ist es, diese gemeinsamen Voreinstellungen mit meinem Dienst zu schreiben. Irgendwelche Vorschläge/Beispiele, die mir weiterhelfen können?
public class MyService extends Service implements Runnable {
LocationManager mLocationManager;
Location mLocation;
MyLocationListener mLocationListener;
Location currentLocation = null;
static SharedPreferences settings;
static SharedPreferences.Editor configEditor;
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
settings = this.getPreferences(MODE_WORLD_WRITEABLE);
configEditor = settings.edit();
writeSignalGPS();
}
private void setCurrentLocation(Location loc) {
currentLocation = loc;
}
private void writeSignalGPS() {
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Looper.prepare();
mLocationListener = new MyLocationListener();
mLocationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 1000, 0, mLocationListener);
Looper.loop();
//Looper.myLooper().quit();
} else {
Toast.makeText(getBaseContext(),
getResources().getString(R.string.gps_signal_not_found),
Toast.LENGTH_LONG).show();
}
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (currentLocation!=null) {
configEditor.putString("mylatitude", ""+currentLocation.getLatitude());
configEditor.putString("mylongitude", ""+currentLocation.getLongitude());
configEditor.commit();
}
}
};
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
if (loc != null) {
Toast.makeText(getBaseContext(),
getResources().getString(R.string.gps_signal_found),
Toast.LENGTH_LONG).show();
setCurrentLocation(loc);
handler.sendEmptyMessage(0);
}
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
Ich erhalte den Fehler auf der Linie settings = this.getPreferences(MODE_WORLD_WRITEABLE);
können Sie mir ein wenig mehr erklären, was ich auf meinem Code ändern muss, um Präferenzmanager zu verwenden? Ich suche auf Google, aber ich kann keine Informationen finden, die für mich gültig sind – NullPointerException
@ AndroidUser99: Sie ersetzen Aufrufe zu 'getPreferences()' mit einem Aufruf von 'PreferenceManager.getDefaultSharedPreferences()'. – CommonsWare
Ich versuchte es mit: Einstellungen = PreferenceManager.getDefaultSharedPreferences (MODE_WORLD_WRITEABLE); aber gibt mir einen Fehler, was ich falsch mache? – NullPointerException