无法使用GPS查找用户位置

时间:2012-01-09 05:30:20

标签: android

    public class LocationtesterActivity extends Activity {
        /** Called when the activity is first created. */
        LocationManager locManager;
        // LocationListener locListener;
        Button b;
        String provider;
        TextView lat, alt, longi;


// Here i am first checking if both GPS and network options are enabled in Lovation and Security Settings or not.

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            b = (Button) findViewById(R.id.button1);
            lat = (TextView) findViewById(R.id.lattitude);
            alt = (TextView) findViewById(R.id.altitude);
            longi = (TextView) findViewById(R.id.longitude);

            b.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    showCurrentLocation();

                }

            });

            locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            criteria.setAltitudeRequired(false);
            criteria.setBearingRequired(false);
            criteria.setCostAllowed(true);

            criteria.setPowerRequirement(Criteria.POWER_LOW);

            provider = locManager.getBestProvider(criteria, true);

            System.out.println("best provider is :" + provider);

            if (!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
                    || !locManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
                System.out.println("in provider enablement");
                createGpsDisabledAlert();

            }

            else {
                System.out.println("in location update request");
                locManager.requestLocationUpdates(provider, 0, 0,
                        new MyLocationListener());

            }

        }

        // for displaying the Dialogue Box
        // if GPS or network not enabled
        // and also taking to location and security screen

        private void createGpsDisabledAlert() {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(
            "Your GPS or network provider is disabled! Would you like to enable it?")
            .setCancelable(false)
            .setPositiveButton("Enable provider",
                    new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    showGpsOptions();
                }
            });
            builder.setNegativeButton("Do nothing",
                    new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }

        private void showGpsOptions() {
            Intent gpsOptionsIntent = new Intent(
                    android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivityForResult(gpsOptionsIntent, 5);
        }

        // //////ends/////

        // Code to check whether user enabled GPS and Network provider in settings
        // if not then show the dialogue box again

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == 5 && resultCode == 0) {
                if (!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                    createGpsDisabledAlert();
                    // Toast.makeText(this,
                    // "provider not enabled. Click the button for settings",
                    // 2000).show();
                } else {

                    Intent i=new Intent(this, LocationtesterActivity.class);
                    startActivity(i);
                    Toast.makeText(this, "User has enabled the provider", 1000)
                    .show();

                }
            }
        }

        // Method to display the current location
        protected void showCurrentLocation() {

            Location location = locManager
            .getLastKnownLocation(LocationManager.GPS_PROVIDER);

            if (location != null) {

                String message = String.format(

                        "Current Location \n Longitude: %1$s \n Latitude: %2$s",

                        location.getLongitude(), location.getLatitude()

                );

                lat.setText("" + location.getLatitude());
                longi.setText("" + location.getLongitude());

                Toast.makeText(LocationtesterActivity.this, message,

                        Toast.LENGTH_LONG).show();

            }
            else
            {
                Toast.makeText(LocationtesterActivity.this, "no last known location", 1000).show();
            }

        }

        // Inner class for LocationListener
        private class MyLocationListener implements LocationListener {

            public void onLocationChanged(Location location) {


                System.out.println("in location changed");

                String message = String.format(

                        "New Location \n Longitude: %1$s \n Latitude: %2$s",

                        location.getLongitude(), location.getLatitude()

                );
                lat.setText("" + location.getLatitude());
                longi.setText("" + location.getLongitude());
                // alt.setText("" + location.getAltitude());
                Toast.makeText(LocationtesterActivity.this, message,
                        Toast.LENGTH_LONG).show();

            }

            public void onStatusChanged(String s, int i, Bundle b) {

                Toast.makeText(LocationtesterActivity.this,
                        "Provider status changed",

                        Toast.LENGTH_LONG).show();

            }

            public void onProviderDisabled(String s) {

                Toast.makeText(LocationtesterActivity.this,

                        "Provider disabled by the user. GPS turned off",

                        Toast.LENGTH_LONG).show();

            }

            public void onProviderEnabled(String s) {

                Toast.makeText(LocationtesterActivity.this,

                        "Provider enabled by the user. GPS turned on",

                        Toast.LENGTH_LONG).show();

            }

        }

    }

我使用上面的代码来查找用户位置。   1.根据我的标准,我总是将GPS作为最佳供应商,但这对我来说很好。   2.Thing是为什么我无法获得任何位置值?   即使位置location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);我没有得到任何东西。   请帮我获取位置值。

2 个答案:

答案 0 :(得分:0)

GPS需要一些时间,因为建筑物内部的速度很慢而且没有。你只需在建筑物外面检查它 和     位置location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);仅在GPS之前获得任何位置时才有效。

答案 1 :(得分:-1)

两件事,

  1. 您是否在清单文件中设置了“android.permission.ACCESS_FINE_LOCATION”权限?

  2. 清除Google地图应用程序的所有数据,然后尝试加载地图以获取地图上的当前位置,如果Google地图显示您当前的位置,那么您的应用程序可以获取当前位置。

  3. 使用最佳标准获取位置的良好习惯。

    有时设备无法读取当前位置。我也遇到了这个问题,但当时我检查谷歌地图/方向应用程序并重置我的GPS。