0

我正在尝试为 Android Automotive 开发应用程序 如您所知,我们不能将 Google Play 服务用于 Android Auto 应用程序,因此我正在寻找一种解决方案来获得最后的位置。位置对象。

4

1 回答 1

0

您需要为您的manifest文件添加权限

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

然后您可以创建您的自定义LocationUtil类,如下所示;

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;
    }

}

然后你可以在任何你想启动的地方创建这个类的实例。

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) {

    }
于 2019-04-19T13:44:04.223 回答