GPS检索无法检索

时间:2015-11-20 15:34:22

标签: android gps locationlistener

我想在我的应用程序中使用GPS。但当我尝试检索代码中显示的GPS读数时,Android工作室给了我belwo提到的错误

将所有必需的权限添加到清单文件

LocationManager lm = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
    LocationListener ll = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            Log.w(TAG, "onLocationChanged");
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            Log.w(TAG, "onStatusChanged");

        }

        @Override
        public void onProviderEnabled(String provider) {
            Log.w(TAG, "onProviderEnabled");
        }

        @Override
        public void onProviderDisabled(String provider) {
            Log.w(TAG, "onProviderDisabled");
        }
    };
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);//error at this line

enter image description here

1 个答案:

答案 0 :(得分:1)

这是由于Marshmallow(Android版本6.0)用户可以选择关闭权限。只需打开此检查以查看是否在您的位置代码之前启用了该权限。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

}

你还应该写一个else语句请求代码,如果用户没有得到它,它将会请求用户的许可。

这是一个不错的请求权限方法:

public void requestPermissions(List<String> permissions, ActivityCompat.OnRequestPermissionsResultCallback onRequestPermissionsResultCallback) {
    String[] params = permissions.toArray(new String[permissions.size()]);
    requestPermissions(params, onRequestPermissionsResultCallback);
}

在您的情况下,您必须传递使用此方法可以获得的位置权限:

private List<String> getRequiredLocationPermissions() {
    String accessCoarsePermission = android.Manifest.permission.ACCESS_COARSE_LOCATION;
    String accessFineLocationPermission = android.Manifest.permission.ACCESS_FINE_LOCATION;
    int hasCoarsePermission = ContextCompat.checkSelfPermission(getActivity(), accessCoarsePermission);
    int hasFineLocationPermission = ContextCompat.checkSelfPermission(getActivity(), accessFineLocationPermission);
    List<String> permissions = new ArrayList<>();
    if (hasCoarsePermission != PackageManager.PERMISSION_GRANTED) {
        permissions.add(accessCoarsePermission);
    }
    if (hasFineLocationPermission != PackageManager.PERMISSION_GRANTED) {
        permissions.add(accessFineLocationPermission);
    }
    return permissions;
}