奇怪的错误代码来获取当前入 location 与android

标签: Java Android
发布时间: 2017/3/18 3:33:15
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我创造我自己的 Java 类来处理 location :

public class MyLocationHandler extends Service implements LocationListener {

......

 public Location getLocation() {
        try {
            locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);

            // getting GPS status
            isGPSEnabled = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);

            // getting network status
            isNetworkEnabled = locationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) {
                // no network provider is enabled
            } else {
                this.canGetLocation = true;
                // First get location from Network Provider
                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) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                // if GPS Enabled get lat/long using GPS Services
                if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return location;
    }

.......

}

这是提取物 build.gradle :

  android {
        compileSdkVersion 23
        buildToolsVersion "24.0.0"

        defaultConfig {
            applicationId "com.mobile.appoperator"
            minSdkVersion 15
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }

问题︰ 问题是,我需要添加 checkSelfPermission ,但这并不是 activity 和加如果我添加它,我不能在上运行我的应用程序 Android 版本低于 api 单板层积材 23。

所以如何处理这个问题?

解决方法 1:

我在做我里面 service ,是的我目前不请求权限因为出于某种原因,你必须要内 activity 去做慈善;

在这里是做相反︰

private void updateUserLocation(){
    if ( Build.VERSION.SDK_INT >= 23 &&
            ContextCompat.checkSelfPermission( getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION )
                    != PackageManager.PERMISSION_GRANTED &&
            ContextCompat.checkSelfPermission( getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {
        return;
    }

    locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

    if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){

        LocationListener listener = new GpsListener();

        Looper.prepare();
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);
        Looper.loop();

    }else {
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

            LocationListener listener = new GpsListener();

            Looper.prepare();
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
            Looper.loop();
        }
    }
}

实际上要求用户授予你相应权限的最佳方法是早就开始做这也许在第一个 activity 像登录的应用程序 (然后他们将会看到一些 window 解释为什么你需要启用 GPS 或准许在您的应用程序。

如果用户拒绝该请求的权限,那么你将不得不重排您的应用程序 — — 基本上感到难过和做你不会做的事 location 功能。

摘要

一般情况下,既然你只问用户要授予权限,也许一次,你可以当他们登录 (因为他们授予的权限后,他们将然后不会再询问),然后当实际上得到 location 更新,你可以简单的核对跟下面做前进 !

我希望这可以帮助你到达某个地方。

官方微信
官方QQ群
31647020