我的应用程序中有五个固定的GPS位置。当你靠近它们时,它将被存储在应用程序中并解锁某种奖牌。我已经在我的测验和奖牌中使用了SharedPreferences,但我对如何在SharedPreferences中存储GPS有点不确定。到目前为止,这是我的代码。
package com.example.norskattraksjon;
import java.util.ArrayList;
import android.content.Context;
import android.content.SharedPreferences;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
public class MyLocationListener implements LocationListener {
private ArrayList<GeoPoint> gplist;
public MyLocationListener(ArrayList<GeoPoint> gpList2) {
gplist = gpList2;
}
public void onLocationChanged(Location location) {
System.out.println("Den kommer hits");
for(GeoPoint gp : gplist){
//SÂ henter vi ut latitude og longitude.
//Det forvirrende her er at klassen "Location" bruker float-koordinater
//mens "GeoPoint" bruker mikrokoordinater. Dermed m man konvertere mellom de.
float latitude = (float) (gp.getLatitudeE6() / 1E6);
float longitude = (float) (gp.getLongitudeE6() / 1E6);
//Vi lager en "location" for hvert av punktene i gplist, utifra latitude og longitude.
Location test = new Location("tester");
test.setLatitude(latitude);
test.setLongitude(longitude);
//location.distanceTo() er en metode som sjekker avstanden til punkter.
//Her skal distansen vÊre under 10 000 meter.
if(location.distanceTo(test) <= 70){
//Om distansen er under 10 000m, s lager du en toast som gir den faktiske avstanden til punktet.
System.out.println("Her er du");
SharedPreferences prefs = getSharedPreferences("com.example.norskattraksjon",
Context.MODE_PRIVATE);
// Lagre en tekst... først trenger vi en editor
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("location", true);
//Lagrer verdien
editor.commit();
};
}
};
private SharedPreferences getSharedPreferences(String string,
int modePrivate) {
// TODO Auto-generated method stub
return null;
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
这是我的其他连贯代码;
package com.example.norskattraksjon;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
public class MainActivityMap extends MapActivity {
private MapController mc;
MapOverlays overlay;
ArrayList<GeoPoint> gplist;
List<Overlay> overlayList;
LocationListener mlocListener; //Denne klassen lytter etter lokasjonen din
LocationManager mlocManager; //Mens denne kobler deg opp mot telefonens GPS.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("WEEEEEEE");
setContentView(R.layout.mapview);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(true);
mc = mapView.getController();
gplist = new ArrayList<GeoPoint>();
overlayList = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher);
overlay = new MapOverlays(drawable, this);
double lat = 60.39403;
double lon = 5.330579;
GeoPoint point = new GeoPoint ((int) (lat * 1E6), (int) (lon*1E6));
gplist.add(point);
OverlayItem punkt1 = new OverlayItem(point, "Du har kommet til!", "Domkyrkja i Bergen!");
double lat2 = 60.702251;
double lon2 = 5.333685;
GeoPoint point1 = new GeoPoint ((int) (lat2 * 1E6), (int) (lon2 *1E6));
gplist.add(point1);
OverlayItem punkt2 = new OverlayItem(point1, "Her ble", "Noen som drepte kongen begravd");
double lat3 = 60.37829;
double lon3 = 5.335665;
GeoPoint point3 = new GeoPoint ((int) (lat3 * 1E6), (int) (lon3 *1E6));
gplist.add(point3);
OverlayItem punkt3 = new OverlayItem(point3, "Her ble", "Himmelfarten med tran i maga!");
double lat4 = 60.213789;
double lon4 = 5.369895;
GeoPoint point4 = new GeoPoint ((int) (lat4 * 1E6), (int) (lon4 *1E6));
gplist.add(point4);
OverlayItem punkt4 = new OverlayItem(point4, "Her ble", "Flygelet skapt");
double lat5 = 60.413619;
double lon5 = 5.37579;
GeoPoint point5 = new GeoPoint ((int) (lat5 * 1E6), (int) (lon5 *1E6));
gplist.add(point5);
OverlayItem punkt5 = new OverlayItem(point5, "Her ble", "Bergensbakken bakt");
overlay.addOverlay(punkt1);
overlay.addOverlay(punkt2);
overlay.addOverlay(punkt3);
overlay.addOverlay(punkt4);
overlay.addOverlay(punkt5);
overlayList.add(overlay);
mc.animateTo(point);
mc.setZoom(11);
//Dette er metoden man bruker for  koble opp til mobilens GPS
mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//Her lager vi en instans av vÂr egen LocationListener. Dette gj¯r at vi kan bestemme selv hva som skjer
//nÂr man trykker p overlays.
mlocListener = new MyLocationListener(gplist);
//Her sier vi at vÂr LocationListener skal sp¯rre om GPS-signaler fra en GPS_PROVIDER.
//0 stÂr for minimumstiden mellom oppdateringer
//Den andre 0 stÂr for minimumsdistansen mellom oppdateringer
//mLocListener er instansen vi lagde av vÂr egen LocationListener.
mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
}
public GeoPoint newGeo(double x, double y){
int a = (int) (x * 1E6);
int b = (int) (y * 1E6);
GeoPoint z = new GeoPoint(a,b);
return z;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
答案 0 :(得分:1)
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context);
int latE6 = (int) (lat * 1e6);
int lonE6 = (int) (lon * 1e6);
p.edit().putInt("Lat", latE6).commit();
p.edit().putInt("Long", lonE6).commit();
在上面的代码中,lat和lon是你所在位置的纬度和经度。那么你可以将它们作为int变量检索并通过再次将它们除以1e6来获取位置值。
int lat= p.getInt("Lat", "");
int lon = p.getInt("Long", "");
答案 1 :(得分:0)
您可以将Lat和Long直接存储在SharedPreference
中,如下所示:
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context);
p.edit().putString("Lat", YOUR_LATTITUDE).commit();
p.edit().putString("Long", YOUR_LONGITUDE).commit(); //SECURITY HAZARD: read below...
然后你可以像这样检索它:
String username = p.getString("Lat", "");
String password = p.getString("Long", "");
希望它会对你有所帮助。
答案 2 :(得分:0)
制作一个这样的方法,只需将值作为参数传递。
private void SavePreferences(String key, String value){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
你可以把它放进去。把它改成这个
private void SavePreferences(String key, long value)
editor.putInt(key,value)