0

I'm trying to develop an application for Android Automotive As you know, we can't use Google Play Services for Android Auto apps, so I m looking for a solution to get last position. The Location object.

Younes Ben Tlili
  • 263
  • 1
  • 2
  • 15
  • Possible duplicate of [What is the simplest and most robust way to get the user's current location on Android?](https://stackoverflow.com/questions/3145089/what-is-the-simplest-and-most-robust-way-to-get-the-users-current-location-on-a) – cutiko Apr 19 '19 at 13:38

1 Answers1

-1

You need to add permission to your manifest file

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

then you can create your custom LocationUtil class like below;

public class LocationUtil {

    private final LocationListener locationListener;

    private Context mContext;

    private Location currentLocation;

    private  LocationManager mLocationManager;

    private static LocationUtil INSTANCE;

    public LocationUtil(Context context, final LocationListener listener) {
        mContext = context;
        mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        locationListener = listener;
    }

    public synchronized static LocationUtil getInstance(Context context, final LocationListener listener) {
        if (INSTANCE == null) {
            INSTANCE = new LocationUtil(context, listener);
        }
        return INSTANCE;
    }

    public void startLocationUpdate() {
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);
        criteria.setAltitudeRequired(false);
        criteria.setSpeedRequired(false);
        criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
        criteria.setCostAllowed(false);

        String provider = mLocationManager.getBestProvider(criteria, true);

        if (provider == null) {
            List<String> providers = mLocationManager.getAllProviders();
            for (String temp : providers) {
                if (mLocationManager.isProviderEnabled(temp)) {
                    provider = temp;
                }
            }
        }
        long distanceChage = 20;
        long updateTime = 1000 * 50;
        if (provider != null && Build.VERSION.SDK_INT >= 23
                && ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
            mLocationManager.requestLocationUpdates(provider, updateTime, distanceChage, locationListener);
            currentLocation = mLocationManager.getLastKnownLocation(provider);
        } else if (provider != null && Build.VERSION.SDK_INT < 23) {
            mLocationManager.requestLocationUpdates(provider, updateTime, distanceChage, locationListener);
            currentLocation = mLocationManager.getLastKnownLocation(provider);
        }
    }


    public void stopLocationUpdate() {
        if (mLocationManager != null) {
            if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED) {
                mLocationManager.removeUpdates(locationListener);
            }
        }
    }

    public Location getLocation() {
        return currentLocation;
    }

}

then you can create an instance of this class whereever you want to initiate.

LocationUtil manager = LocationUtil.getInstance(context, YourActivity.class);
manager.startLocationUpdate();

 @Override
    public void onLocationChanged(final Location location) {
        //Do your work here
    }

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

    }

    @Override
    public void onProviderEnabled(final String provider) {

    }

    @Override
    public void onProviderDisabled(final String provider) {

    }
Ergin Ersoy
  • 890
  • 8
  • 28