Tengo algunas preferencias compartidas (latitud, longitud) a las que quiero acceder desde un servicio, que no está subclasificado de Activity.Problemas al usar SharedPreferences en un servicio (getPreferences no existe en un servicio)
En particular, cuando intento acceder a getPreferences, esta función no existe en un servicio. Mi código se publica a continuación
Mi objetivo aquí es permitir ESCRIBIR estas preferencias compartidas con mi servicio. ¿Alguna sugerencia/ejemplo que me pueda ayudar?
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) {}
}
me sale el error en la línea settings = this.getPreferences(MODE_WORLD_WRITEABLE);
¿me puede explicar un poco más lo que tengo que cambiar en mi código para usar el administrador de preferencias? Estoy buscando en google pero no puedo encontrar información válida para mí – NullPointerException
@ AndroidUser99: Reemplaza las llamadas a 'getPreferences()' con una llamada a 'PreferenceManager.getDefaultSharedPreferences()'. – CommonsWare
intenté con esto: settings = PreferenceManager.getDefaultSharedPreferences (MODE_WORLD_WRITEABLE); pero me da un error, ¿qué estoy haciendo mal? – NullPointerException