简体   繁体   中英

In ANDROID, How to get a current position and tracking in map using GPS without giving any location in a program?

我是android的新手,有人可以帮助我解决我的问题吗。...如何在不使用任何程序位置的情况下使用GPS获取当前位置并在地图中进行跟踪?

You want the easy way out ! Use MyLocationOverlay object. you can get the current location by calling the method getLastFix(); . To enable tracking use enableMyLocation() . To add this object to the map you need to add it to your map overlays.

MyLocationOverlay currLoc=new MyLocationOverlay(context,mapKey);
mapView.getAllOverlays.add(currLoc);
currLoc.enableMyLocation();
Location myLastLocation=currLoc.getLastFix();
currLoc.enableCompass();

Do make sure, in onPause() you do this :

currLoc.disableMyLocation();  //to save battery.

you can resume updates in onResume() by calling currLoc.enableMyLocation();

This is the easiest way I could find! and it is quite accurate too

Try ;

          String m_BestProvider;
          LocationManager m_LocationManager;
          LocationListener m_LocationListener = null;
          Location m_Location = null;

          m_LocationManager = (LocationManager) m_Context.getSystemService(Context.LOCATION_SERVICE);

          Criteria c = new Criteria();
          c.setAccuracy(Criteria.ACCURACY_COARSE);
          c.setAltitudeRequired(false);
          c.setBearingRequired(false);
          c.setSpeedRequired(false);
          c.setCostAllowed(true);
          c.setPowerRequirement(Criteria.POWER_HIGH);

                    m_BestProvider = m_LocationManager.getBestProvider(c, false);

                    // Define a listener that responds to location updates
                    m_LocationListener = new LocationListener() {
                        public void onLocationChanged(Location location) {
                          // Called when a new location is found by the network location provider.
                        }

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

                        public void onProviderEnabled(String provider) {}

                        public void onProviderDisabled(String provider) {}
                      };

                    m_LocationManager.requestLocationUpdates(m_BestProvider, 0, 0, m_LocationListener);
                    m_Location = m_LocationManager.getLastKnownLocation(m_BestProvider);
                    Systme.out.println(m_Location.getLatitude() "," +m_Location.getLongitude());

Add in AndriodManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
public class GPSLocationBased extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.locationbased);

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    LocationListener ll = new Mylocationlistener();

    // ---Get the status of GPS---
    boolean isGPS = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);

    // If GPS is not enable then it will be on
    if(!isGPS)
    {
        Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
        intent.putExtra("enabled", true);
         sendBroadcast(intent);
    }

    //<--registers the current activity to be notified periodically by the named provider. Periodically,
    //the supplied LocationListener will be called with the current Location or with status updates.-->
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
}

/**
 *Mylocationlistener class will give the current GPS location 
 *with the help of Location Listener interface 
 */
private class Mylocationlistener implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            // ---Get current location latitude, longitude, altitude & speed ---

            Log.d("LOCATION CHANGED", location.getLatitude() + "");
            Log.d("LOCATION CHANGED", location.getLongitude() + "");
            float speed = location.getSpeed();
            double altitude = location.getAltitude();
            Toast.makeText(GPSLocationBased.this,"Latitude = "+
                    location.getLatitude() + "" +"Longitude = "+ location.getLongitude()+"Altitude = "+altitude+"Speed = "+speed,
                    Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

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

}

Through this code u will get ur lat and long. and u may use it on ur gmap. this code also start gps functionality problematically. Hope this will help u.. All the best :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM