Android如何检查gps是否连接到卫星?

时间:2012-09-24 14:50:26

标签: android gps

我得到了这个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);

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

        }
        public void onGpsStatusChanged(int event) {
            if (event == GpsStatus.GPS_EVENT_FIRST_FIX) {
                // showMessageDialog("GPS fixed");
                Toast.makeText(getApplicationContext(), "GPS fixed",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }// gps vége

我想创建一个简单的加载器对话框,直到它连接到卫星。 我该如何管理?在调用此方法之前,如何检查它是否先连接到卫星? 谢谢你的回答!

3 个答案:

答案 0 :(得分:2)

您需要为此实施GpsStatus.Listener

例如,

public class MyActivity extends Activity implements GpsStatus.Listener
{
         ...
         ...
         ...
         // add listener into locationManager
        locationManager.addGpsStatusListener(this);

       @Override
       public void onGpsStatusChanged(int) 
       {

          switch (event) 
         {
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
            break;
            case GpsStatus.GPS_EVENT_FIRST_FIX:   // this means you  found GPS Co-ordinates                          
            break;
            case GpsStatus.GPS_EVENT_STARTED:
            break;
            case GpsStatus.GPS_EVENT_STOPPED:
            break;
          }
       }
}

答案 1 :(得分:0)

您可以弹出对话框,请求位置更新,然后在实际获得位置更新时关闭对话框。

答案 2 :(得分:0)

让您Activity实施GpsStatus.Listener

然后使用:

public void onChanged(int event) {
        switch (event) {
            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                break;
            case GpsStatus.GPS_EVENT_FIRST_FIX:                              
                break;
            case GpsStatus.GPS_EVENT_STARTED:
                break;
            case GpsStatus.GPS_EVENT_STOPPED:
                break;
        }
    }

GpsStatus.GPS_EVENT_FIRST_FIX是GPS系统自启动以来收到首次修复时发送的事件。