繁体   English   中英

如何在没有Google Play服务的情况下从Android Automotive系统获取位置信息

[英]How I can get Location from Android Automotive system without Google Play Services

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

您需要为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) {

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM