1

我得到了这个 gps 接收器方法,它将一些数据存储到数据库中。

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


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


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

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) {
        Toast.makeText(getApplicationContext(), "Gps Disabled",
                Toast.LENGTH_SHORT).show();
        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                case DialogInterface.BUTTON_POSITIVE:
                    // show gps otions
                    Intent gpsOptionsIntent = new Intent(
                            android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivity(gpsOptionsIntent);
                    break;

                case DialogInterface.BUTTON_NEGATIVE:
                    dialog.cancel();
                    break;
                }
            }
        };

        AlertDialog.Builder builder = new AlertDialog.Builder(main.this);
        builder.setMessage("A GPS nincs aktiválva!\nAktiválja most?")
                .setPositiveButton("Aktivál", dialogClickListener)
                .setNegativeButton("Nem", dialogClickListener).show();
    }

    public void onProviderEnabled(String provider) {
        Toast.makeText(getApplicationContext(), "Gps Enabled",
                Toast.LENGTH_SHORT).show();

    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

}// gps vége

平均更新时间为 1 秒。但是我的手机滞后(galaxy s2)我可以看到它,因为有一个计时器。

有谁知道为什么?

4

2 回答 2

1

我想我得到了解决方案:

globalconstant.mlocManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, (long) update, 0,
                globalconstant.mlocListener);

在“更新”之后,它代表“0”。这是我发现的:

requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

这意味着最小距离为“0”,所以这就是它如此“滞后”的原因。但是感谢任何人!

于 2012-09-21T15:44:00.800 回答
0

GPS 非常占用处理器资源。您的手机速度变慢并不令我感到惊讶。这并不罕见。

事实上,如果您将 GPS 保持打开的时间足够长,您的手机就会变热并且电池会很快耗尽!

于 2012-09-21T15:23:53.687 回答