Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
165 views
in Technique[技术] by (71.8m points)

android - GPS reading cant be retrieved

i want to use GPS in my App. but when i tried to retrieve GPS readings as shown belwo in the code, Android studio gave me the belwo mentioned error

despit all the required permissions are added to manifest file

code:

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is due to in Marshmallow (Android version 6.0) Users can choose to turn off permissions. Simply wrap this check to see if the permission is enabled before your location code.

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

}

You should also write in an else statement request code which will request the permission from the user if they haven't got it.

Here's a nice request permissions method:

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

In your case you will have to pass it the Location permissions which you can get with this method:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...