当gps修复时,Android gps启动

时间:2012-09-25 10:37:12

标签: android gps

我有这个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修复后启动? 谢谢你的回答!

1 个答案:

答案 0 :(得分: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
     }
}