Android 棉花糖,locationManager.isProviderEnbled 总是 return 错误

Android Marshmallow, locationManager.isProviderEnbled always return false

        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

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

两者都是错误的,虽然我确实检查了 Marshmallow ,但有一些类似运行时权限的东西,所以我点击了这些链接 link1 and link2

并进行了一些调试并将 checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION); 放在 isNetworkEnabled returns 0 之前,即 PERMISSION_GRANTED

代码

SplashScreenActivity

public class SplashScreenActivity extends Activity {

    private static final String TAG = "SplashScreenActivity";
    boolean isGPSEnabled = false;

    // flag for network status
    boolean isNetworkEnabled = false;

    final private int REQUEST_CODE_ASK_PERMISSIONS = 123;

    @TargetApi(Build.VERSION_CODES.M)
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.activity_splashscreen);

        int hasLocationPermission = checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
        if (hasLocationPermission != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    REQUEST_CODE_ASK_PERMISSIONS);
            return;
        }
        //comes till here . ie hasLocationPermission is true 
        LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);

        checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION); //breakpoint at this line gives 0 ie PERMISSION_GRANTED

        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); //false at debug breakpoint
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);//false at debug breakpoint

    }


}

清单Here

问题出在设备上,我尝试使用 Nexus 5x 和同一段代码 returns 正确。 问题是三星最新的棉花糖更新

使用这段代码,它将适用于所有 android 版本-

创建一个布尔类型的方法来检查用户是否有权限-

 private boolean checkPermission() {

    boolean flag = true;

    String[] permissions = {"android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION"};
    boolean hasPermission = (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED);
    if (!hasPermission) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(permissions, com.jeenees.androidapp.utils.Keys.FILE_READ_PERMISSION);
            flag = false;
        }
    } else {
        flag = true;
    }

    return flag;
}

在你想要的地方使用上面的方法-

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

 if (checkPermission()){
            isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); //false at debug breakpoint
            isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);//false at debug breakpoint
  }

希望对您有所帮助。