get the current location fast and once in android

前端 未结 7 1597
刺人心
刺人心 2020-12-07 10:48

I have an android application that need device current location (latitude and longitude). I\'ve tried some tutorial on the net and specially some solutions from stack overfl

7条回答
  •  再見小時候
    2020-12-07 11:27

    All the above answers are not worked for me so I answered this Initially add the dependencies

    
    
    
    

    after add the class MyLocationListiner.java

    package com.example.firebase_auth;
    
    /**
     * Created by Chromicle(Ajay Prabhakar).
     */
    
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Build;
    import android.os.Bundle;
    import android.widget.Toast;
    
    import androidx.annotation.Nullable;
    import androidx.core.content.ContextCompat;
    
    import static android.content.Context.LOCATION_SERVICE;
    
    public class MyLocationListener implements LocationListener {
    
        public static double latitude;
        Context ctx;
        Location location;
        LocationManager locationManager;
        boolean isGPSEnabled = false;
        boolean isNetworkEnabled = false;
        public static double longitude;
        MyLocationListener(Context ctx) {
            this.ctx = ctx;
            try {
                locationManager = (LocationManager) ctx.getSystemService(LOCATION_SERVICE);
                isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
                Toast.makeText(ctx, "GPS Enable " + isGPSEnabled, Toast.LENGTH_LONG).show();
                isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
                Toast.makeText(ctx, "Network Enable " + isNetworkEnabled, Toast.LENGTH_LONG).show();
    
                if ( Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission
                        ( ctx, android.Manifest.permission.ACCESS_FINE_LOCATION )
                        != PackageManager.PERMISSION_GRANTED &&
                        ContextCompat.checkSelfPermission( ctx,
                                android.Manifest.permission.ACCESS_COARSE_LOCATION) !=
                                PackageManager.PERMISSION_GRANTED) {  }
                if (isGPSEnabled == true) {
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,     0,       0, this);
                    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                }
                if (isNetworkEnabled==true) {
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,    0,     0, this);
                    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                }
                latitude = location.getLatitude();
                longitude = location.getLongitude();
                // Toast.makeText(ctx,"latitude: "+latitude+" longitude: "+longitude,Toast.LENGTH_LONG).show();
    
    
            }
            catch(Exception ex)
            {
    
                Toast.makeText(ctx,"Exception "+ex, Toast.LENGTH_LONG).show();
            }
        }
        @Nullable
        @Override
        public void onLocationChanged(Location loc)
        {
            loc.getLatitude();
            loc.getLongitude();
            latitude=loc.getLatitude();
            longitude=loc.getLongitude();
        }
    
        @Override
        public void onProviderDisabled(String provider)
        {
            //print "Currently GPS is Disabled";
        }
        @Override
        public void onProviderEnabled(String provider)
        {
            //print "GPS got Enabled";
        }
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras)
        {
    
        }
    }
    

    To use that class add this method location is stored in the Address string

    public void getLocation(){
            Double latitude = 0.0, longitude;
            String message = "";
            LocationManager mlocManager = null;
            LocationListener mlocListener;
            mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            mlocListener = new MyLocationListener(this);
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
            if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    
                latitude = MyLocationListener.latitude;
                longitude = MyLocationListener.longitude;
                message = message +"https://www.google.com/maps/dir/@"+ latitude +","+  longitude;
                address=message;
                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
                if (latitude == 0.0) {
                    Toast.makeText(getApplicationContext(), "Currently gps has not found your location....", Toast.LENGTH_LONG).show();
                }
    
            } else {
                Toast.makeText(getApplicationContext(), "GPS is currently off...", Toast.LENGTH_LONG).show();
            }
        }
    

    Hope it helpfull

提交回复
热议问题