GPS locations are not retrieved properly

前端 未结 3 1085
后悔当初
后悔当初 2021-01-16 06:00

Im new to android development and i understand the android activity life cycle. Please see the following code.

    public class MyTest extends Activity{

            


        
3条回答
  •  不知归路
    2021-01-16 06:35

    I made one service for that. It is easy for get Longitude / Latitude using it.

    Copy/paste this class in your project.

    package com.sample;
        import com.sample.globalconstant;
        import android.app.Service;
        import android.content.Context;
        import android.content.Intent;
        import android.location.Location;
        import android.location.LocationManager;
        import android.os.Bundle;
        import android.os.IBinder;
        import android.util.Log;
        import android.widget.Toast;
    
        public class MyServiceGPS extends Service
        {
            private static final String TAG = "BOOMBOOMTESTGPS";
            private LocationManager mLocationManager = null;
            private static final int LOCATION_INTERVAL = 1000;
            private static final float LOCATION_DISTANCE = 10f;
    
            private class LocationListener implements android.location.LocationListener{
                Location mLastLocation;
                public LocationListener(String provider)
                {
                    Log.e(TAG, "LocationListener " + provider);
                    mLastLocation = new Location(provider);
                }
                public void onLocationChanged(Location location)
                {
                    Log.e(TAG, "onLocationChanged: " + location.getLatitude() +"....."+ location.getLongitude());
                    globalconstant.lat  = location.getLatitude();
                    globalconstant.lon  = location.getLongitude();
                    Toast.makeText(getApplicationContext(), location.getLatitude() +"....."+ location.getLongitude(), 1000).show();
                    mLastLocation.set(location);
                }
                public void onProviderDisabled(String provider)
                {
                    Log.e(TAG, "onProviderDisabled: " + provider);           
                }
                public void onProviderEnabled(String provider)
                {
                    Log.e(TAG, "onProviderEnabled: " + provider);
                }
                public void onStatusChanged(String provider, int status, Bundle extras)
                {
                    Log.e(TAG, "onStatusChanged: " + provider);
                }
            }
            LocationListener[] mLocationListeners = new LocationListener[] {
                    new LocationListener(LocationManager.GPS_PROVIDER),
                    new LocationListener(LocationManager.NETWORK_PROVIDER)
            };
            @Override
            public IBinder onBind(Intent arg0)
            {
                return null;
            }
            @Override
            public int onStartCommand(Intent intent, int flags, int startId)
            {
                Log.e(TAG, "onStartCommand");
                super.onStartCommand(intent, flags, startId);      
                return START_STICKY;
            }
            @Override
            public void onCreate()
            {
                Log.e(TAG, "onCreate");
                initializeLocationManager();
                try {
                    mLocationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE,
                            mLocationListeners[1]);
    
                } catch (java.lang.SecurityException ex) {
                    Log.i(TAG, "fail to request location update, ignore", ex);
                } catch (IllegalArgumentException ex) {
                    Log.d(TAG, "network provider does not exist, " + ex.getMessage());
                }
                try {
                    mLocationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE,
                            mLocationListeners[0]);
                } catch (java.lang.SecurityException ex) {
                    Log.i(TAG, "fail to request location update, ignore", ex);
                } catch (IllegalArgumentException ex) {
                    Log.d(TAG, "gps provider does not exist " + ex.getMessage());
                }
            }
            @Override
            public void onDestroy()
            {
                Log.e(TAG, "onDestroy");
                super.onDestroy();
                if (mLocationManager != null) {
                    for (int i = 0; i < mLocationListeners.length; i++) {
                        try {
                            mLocationManager.removeUpdates(mLocationListeners[i]);
                        } catch (Exception ex) {
                            Log.i(TAG, "fail to remove location listners, ignore", ex);
                        }
                    }
                }
            }
            private void initializeLocationManager() {
                Log.e(TAG, "initializeLocationManager");
                if (mLocationManager == null) {
                    mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
                }
            }
        }
    

    Copy this code in your Activity when you want to start:

    startService(new Intent(this,MyServiceGPS.class));
    

    Create one class globalconstant:

    public class globalconstant { public static double lat, lon; }
    

    when you want to current latitude and longitude in your project only write this globalconstant.lat ,globalconstant.lon

    Add uses-permission in Manifest

提交回复
热议问题