getting latitude and longitude using gps every 10 minute in background android

前端 未结 5 1469
猫巷女王i
猫巷女王i 2021-01-01 04:00

I am done getting latitude and longitude using LocationManager and working proper.

Requirement:

get latitude and longitude every

5条回答
  •  Happy的楠姐
    2021-01-01 04:47

    your location will really not be saved in the database because every time your location is updated(via onLocationChanged(Location location))

    what you should do is bring your timerinitialization in your OnCreate() method. then declare these variables.

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

    as global and have them updated in the onLocationChanged(Location location)method. This way, whenever the timer calls on persistence in your database, the lat, lng, alt values will be available and be updated based on your latest location.

    //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);
    
        } 
    
      }
    

    ADDED:- and if you draw a path then you use a This code

    /** Called when the activity is first created. */
    private List mapOverlays;
    
      private Projection projection;  
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    linearLayout = (LinearLayout) findViewById(R.id.zoomview);
    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
    
    mapOverlays = mapView.getOverlays();        
    projection = mapView.getProjection();
    mapOverlays.add(new MyOverlay());        
    
    }
    
      @Override
      protected boolean isRouteDisplayed() {
      return false;
      }
    
     class MyOverlay extends Overlay{
    
      public MyOverlay(){
    
      }   
    
    public void draw(Canvas canvas, MapView mapv, boolean shadow){
        super.draw(canvas, mapv, shadow);
    
        Paint   mPaint = new Paint();
        mPaint.setDither(true);
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(2);
    
        GeoPoint gP1 = new GeoPoint(19240000,-99120000);
        GeoPoint gP2 = new GeoPoint(37423157, -122085008);
    
        Point p1 = new Point();
        Point p2 = new Point();
        Path path = new Path();
    
        projection.toPixels(gP1, p1);
        projection.toPixels(gP2, p2);
    
        path.moveTo(p2.x, p2.y);
        path.lineTo(p1.x,p1.y);
    
        canvas.drawPath(path, mPaint);
    }
    

提交回复
热议问题