2012-09-25 112 views
0

我有这个GPS方法:的Android GPS开始

if (globalconstant.gps) { 
          globalconstant.mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
          globalconstant.mlocManager 
            .addGpsStatusListener(main.this); 
          Log.w("TravellerLog :: ", "22"); 
          addGPSListener(); 
          ProgressDialog MyDialog = ProgressDialog.show(
            main.this, "Info", 
            " GPS kapcsolódásra vár... ", true);} 

...

/* GPS kapcsolódás figyelő */ 
    public void onGpsStatusChanged(int event) { 

     // Log.w("TravellerLog :: ", "l1"); 
     switch (event) { 
     case GpsStatus.GPS_EVENT_SATELLITE_STATUS: 
      break; 
     case GpsStatus.GPS_EVENT_FIRST_FIX: 

      show_sens = show_sens + "- GPS\n"; 
      sensors.setText(show_sens); 
      Toast.makeText(getApplicationContext(), "GPS kapcsolódva!", 
        Toast.LENGTH_SHORT).show(); 
               // Co-ordinates 
      myChronometer.stop(); 
      myChronometer.setBase(SystemClock.elapsedRealtime()); 
      meres = false; 
      start_button.setText("START"); 
      break; 
     case GpsStatus.GPS_EVENT_STARTED: 
      break; 
     case GpsStatus.GPS_EVENT_STOPPED: 
      break; 
     } 
    } 

的addGPSListener()

// GPS 
    private void addGPSListener() { 

     globalconstant.db.setVersion(1); 
     globalconstant.db.setLocale(Locale.getDefault()); 
     globalconstant.db.setLockingEnabled(true); 

     final String gps = 

     "CREATE TABLE IF NOT EXISTS GPS_Values (" 

       + "id INTEGER PRIMARY KEY AUTOINCREMENT, Latitude float(10, 8), Longitude float(10, 8),Accuracy INTEGER,Speed INTEGER,City TEXT,timestamp TIMESTAMP);"; 
     globalconstant.db.execSQL(gps); 

     Log.d("FESTIVALE :: ", "Frissítési idő: " 
       + globalconstant.gps_update_value); 
     float f = Float.valueOf(globalconstant.gps_update_value.trim()) 
       .floatValue(); 
     float update = f * 1000; 

     globalconstant.mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     globalconstant.mlocListener = new MyLocationListener(); 
     globalconstant.mlocManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, (long) update, 5f, 
       globalconstant.mlocListener); 

     // if(Global.getInstance().currentGPSLocation != null){ 
     // 
     // } 

    } 

    public class MyLocationListener implements LocationListener { 

     public void onLocationChanged(Location loc) { 

      float szel = (float) loc.getLatitude(); 
      float hossz = (float) loc.getLongitude(); 
      int horiAcc = (int) (loc.getAccuracy()); 
      // int speed=(int) ((loc.getSpeed()*3600)/1000); //sebesség km/h-ban 
      int speed = 0; 

      if (loc.hasSpeed()) { 
       speed = (int) ((loc.getSpeed() * 3600)/1000); // sebesség 
                   // km/h-ban 
      } else { 
       speed = 0; 
      } 

      String test = String.format("%.08f", szel); 
      String test2 = String.format("%.08f", hossz); 

      Geocoder geocoder = new Geocoder(main.this, Locale.getDefault()); 
      try { 
       List<Address> addresses = geocoder.getFromLocation(szel, hossz, 
         1); 
       city = addresses.get(0).getLocality(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      ContentValues gps_values = new ContentValues(); 

      gps_values.put("Latitude", test); 
      gps_values.put("Longitude", test2); 
      gps_values.put("Accuracy", horiAcc); 
      gps_values.put("Speed", speed); 
      gps_values.put("City", city); 

      SimpleDateFormat dateFormat = new SimpleDateFormat(
        "yyyy-MM-dd HH:mm:ss"); 
      Date date = new Date(System.currentTimeMillis()); 

      gps_values.put("timestamp", dateFormat.format(date)); 

      try { 
       globalconstant.db.beginTransaction(); 
       globalconstant.db.insert("GPS_Values", null, gps_values); 
       globalconstant.db.setTransactionSuccessful(); 
      } finally { 
       globalconstant.db.endTransaction(); 
      } 

      Log.d("FESTIVALE :: ", 
        "Hely " + test + ", " + test2 + " , " + horiAcc + " , " 
          + speed + " , " + city + "," 
          + dateFormat.format(date)); 
      // String Text = "My current location is: " + "Latitude = " 
      // + loc.getLatitude() + "\nLongitude = " + loc.getLongitude(); 

      // Toast.makeText(getApplicationContext(), "Hely" +test + "\n" + 
      // test2 + "\n" + horiAcc + "\n" +speed + "\n" +city, 
      // Toast.LENGTH_SHORT) 
      // .show(); 

     } 

     public void onProviderDisabled(String provider) { 

     } 

     public void onProviderEnabled(String provider) { 
      // 
     } 

     public void onStatusChanged(String provider, int status, Bundle extras) { 
      /* This is called when the GPS status alters */ 
      switch (status) { 
      case LocationProvider.OUT_OF_SERVICE: 
       Log.v(tag, "Status Changed: Out of Service"); 
       Toast.makeText(main.this, "Status Changed: Out of Service", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case LocationProvider.TEMPORARILY_UNAVAILABLE: 
       Log.v(tag, "Status Changed: Temporarily Unavailable"); 
       Toast.makeText(main.this, 
         "Status Changed: Temporarily Unavailable", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case LocationProvider.AVAILABLE: 
       Log.v(tag, "Status Changed: Available"); 
       Toast.makeText(main.this, "Status Changed: Available", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      } 

     } 

    }// gps vége 

所以问题是,我如何能管理GPS监听器(在数据库中存储协调...)olny启动时,GPS固定? 感谢您的回答!

回答

0

您已经正确编码,只需要检查一定的条件,如果条件得到满足,然后再补充LAT-LON细节SQL,请执行以下操作,

case GpsStatus.GPS_EVENT_FIRST_FIX: 
{ 

    ... 
    ... 
    ... 

    new DBThread().start(); 
} 
break; 

private class DBThread extends Thread 
{ 
    public void run() 
    { 
     // Fetch Lat-lon details here and store in sqlite 

     ... 
     // Remove gps code to save in battery from drain soon 
    } 
} 
+0

嗯,我来试试.. 但是我怎样才能添加一个进度对话框,它显示了什么时候gps被调用,当它被修复时会出现diappears? – David

+0

你可以在//获取评论之前显示它。 – Lucifer

+0

可以ü编辑我的问题你如何看待你的答案?thx! – David