Location returns 0.0 with WIFI/3G/4G in Lollipop 5.0.2

前端 未结 3 1309
难免孤独
难免孤独 2021-01-14 01:08

I am trying to fetch location based on WiFi/3G/4G connection but it always returns 0.0 as latitude and longitude. If same code is used

3条回答
  •  梦毁少年i
    2021-01-14 02:02

    The steps to be followed :

    Step 1 : check the following permission in Manifest File

    
    
    
    
    
    
    

    Step 2 : check the service class

    import android.annotation.SuppressLint;
    
    
    public class  GPSTracker extends Service implements LocationListener {
    
    public static boolean isGPSEnabled = false;
    public static boolean isNetworkEnabled = false;
    static boolean canGetLocation = false;
    
    Location location; // location
    double latitude; // latitude
    double longitude; // longitude
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 2; // 2 meters
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
    protected LocationManager locationManager;
    
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
    @SuppressWarnings("static-access")
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("onCreate", "Success !");
            latitudeAndLongtitude();
    }
    
    public void latitudeAndLongtitude()
    {
        locationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        if (!isGPSEnabled && !isNetworkEnabled) {
            Toast.makeText(getApplicationContext(), "No provider found!", Toast.LENGTH_SHORT).show();
        }else{
            GPSTracker.canGetLocation = true;
            if(isGPSEnabled)
            {
                if (location == null) {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("Network", "GPS");
                if (locationManager != null) {
                    Log.d("locationManager", "is not null ");
                    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    if (location != null) {
                        Log.d("Network", "GPS lat and long gets ");
                        Toast.makeText(getApplicationContext(), "isNetworkEnabled!", Toast.LENGTH_SHORT).show();
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                        Helper.savePreferences(getApplicationContext(), NameConversion.LATITUDE,String.valueOf(latitude));
                        Helper.savePreferences(getApplicationContext(), NameConversion.LONGITUDE,String.valueOf(longitude));
                    }else{
                        Log.d("location", "is getting null ");
                    }
                }
            }
        }
            else if(isNetworkEnabled)
            {
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("Network", "Network");
                if (locationManager != null) {
                    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        //Toast.makeText(getApplicationContext(), "isGPSEnabled!", Toast.LENGTH_SHORT).show();
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                        Helper.savePreferences(getApplicationContext(), NameConversion.LATITUDE,String.valueOf(latitude));
                        Helper.savePreferences(getApplicationContext(), NameConversion.LONGITUDE,String.valueOf(longitude));
                    }
                }
            }
        }
    }
    public Location getLocation() {
        return location;
    }
    /**
     * Stop using GPS listener Calling this function will stop using GPS in your
     * app
     * */
    public void stopUsingGPS() {
        if (locationManager != null) {
            locationManager.removeUpdates(GPSTracker.this);
        }
    }
    /**
     * Function to get latitude
     * */
    public double getLatitude() {
        if (location != null) {
            latitude = location.getLatitude();
        }
        // return latitude
        return latitude;
    }
    /**
     * Function to get longitude
     * */
    public double getLongitude() {
        if (location != null) {
            longitude = location.getLongitude();
        }
        // return longitude
        return longitude;
    }
    
    public void sendLocationToServer() {
        Log.i("sendLocationToServer", "Called!");
    
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i("onDestroy", "Called!");
        stopSelf();
    
    }
    
    /**
     * Function to check GPS/wifi enabled
     * 
     * @return boolean
     * */
    @SuppressWarnings("static-access")
    public boolean canGetLocation() {
        return this.canGetLocation;
    }
    
    /**
     * Function to show settings alert dialog On pressing Settings button will
     * lauch Settings Options
     * */
    @SuppressLint("NewApi")
    
    @Override
    public void onLocationChanged(Location location) {
    
        latitudeAndLongtitude();
    }
    
    @Override
    public void onProviderDisabled(String provider) {
    }
    
    @Override
    public void onProviderEnabled(String provider) {
    }
    
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }}
    

    step 3 : Enable the service in Manifest file

    inside application tag

      
        
    

    setp 4 : start the service in where you want

    Hope this will work if you face stil problem may be your mobile will not get the GPS and Network Locaiton .

提交回复
热议问题