0

私のアプリケーションには 5 つの固定 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
}

}

そして、これは私のもう 1 つの首尾一貫したコードです。

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

3 に答える 3

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", "");
于 2012-11-30T13:32:24.667 に答える
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) 
于 2012-11-30T13:37:10.117 に答える
0

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", "");

それがあなたを助けることを願っています。

于 2012-11-30T13:28:22.567 に答える