0

10分ごとに自分の場所を保存したい
.gpsから場所を取得するコードがあり、
10分ごとに自分の場所をデータベースに保存したい
.これは私のコードです:

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    LocationManager locationManager;
    String context = Context.LOCATION_SERVICE;
    locationManager = (LocationManager)getSystemService(context);

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    String provider = locationManager.getBestProvider(criteria, true);

    updateWithNewLocation(null);

    locationManager.requestLocationUpdates(provider, (10*60*1000), 10,
                                           locationListener);
}
private final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      updateWithNewLocation(location);
    }

    public void onProviderDisabled(String provider){
      updateWithNewLocation(null);
    }

    public void onProviderEnabled(String provider){ }
    public void onStatusChanged(String provider, int status, 
                                Bundle extras){ }
  };
  public void updateWithNewLocation(Location location) {


        if (location != null) {
            Dbhelper helper = new Dbhelper(this);
            final SQLiteDatabase db = helper.getWritableDatabase();
            long time = System.currentTimeMillis();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
            final String curTime = df.format(time);
            final double lat = location.getLatitude();
            final double lng = location.getLongitude();
            final double alt = location.getAltitude();
            System.out.println(lat);
            System.out.println(lng);
            System.out.println(alt);
            /*db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " +
            "('"+lng+"','"+lat+"','"+alt+"','"+curTime+"')");
            db.close();*/
            Timer timer = new Timer();
            timer.schedule(new TimerTask(){
                @Override
                public void run(){
                    db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " +
                            "('"+lng+"','"+lat+"','"+alt+"','"+curTime+"')");
                    db.close();
                }
            }, 10*60*1000, 10*60*1000);

          } 
       }

しかし、10分ごとに保存するのはうまくいきません..
どうすればこれを解決できますか??ありがとう:)

4

2 に答える 2

0

ハンドラーを使用して、将来のある時点で更新できます。

http://developer.android.com/reference/android/os/Handler.html

http://www.vogella.com/articles/AndroidPerformance/article.html#concurrency_handler

于 2012-05-09T02:19:37.040 に答える
0

あなたの場所は実際にはデータベースに保存されません。これは、( 経由で) 場所が更新されるたびonLocationChanged(Location location)に、タイマーの新しいインスタンスを作成しているためです。

あなたがすべきことは、あなたのメソッドtimerにあなたの初期化をもたらすことです。OnCreate()次に、これらの変数を宣言します

double lat = location.getLatitude();
double lng = location.getLongitude();
double alt = location.getAltitude();

グローバルとして、メソッドでそれらを更新しonLocationChanged(Location location)ます。このようにして、タイマーがデータベースの永続性を呼び出すたびに、lat, lng, alt値が利用可能になり、最新の場所に基づいて更新されます。

アップデート:

ここで、コードを修正しました。これを試すことができますか?

//decalred as global variables
String curTime;
double lat;
double lng;
double alt;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    LocationManager locationManager;
    String context = Context.LOCATION_SERVICE;
    locationManager = (LocationManager)getSystemService(context);

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    String provider = locationManager.getBestProvider(criteria, true);

        //Initialize timer
        Timer timer = new Timer();
            timer.schedule(new TimerTask(){
                @Override
                public void run(){
                    db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " +
                            "('"+lng+"','"+lat+"','"+alt+"','"+curTime+"')");
                    db.close();
                }
            }, 10*60*1000, 10*60*1000);


    updateWithNewLocation(null);

    locationManager.requestLocationUpdates(provider, (10*60*1000), 10,
                                           locationListener);
}
private final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      updateWithNewLocation(location);
    }

    public void onProviderDisabled(String provider){
      updateWithNewLocation(null);
    }

    public void onProviderEnabled(String provider){ }
    public void onStatusChanged(String provider, int status, 
                                Bundle extras){ }
  };
  public void updateWithNewLocation(Location location) {


        if (location != null) {
            Dbhelper helper = new Dbhelper(this);
            final SQLiteDatabase db = helper.getWritableDatabase();
            long time = System.currentTimeMillis();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
            curTime = df.format(time);
            lat = location.getLatitude();
            lng = location.getLongitude();
            alt = location.getAltitude();
            System.out.println(lat);
            System.out.println(lng);
            System.out.println(alt);

        } 

      }
于 2012-05-09T02:26:21.177 に答える