Android 运行时权限(requestPermissions)不起作用

Android 运行时权限(requestPermissions)不起作用,android,permissions,Android,Permissions,我必须在运行时检查片段中的权限以获取位置。 这里有一个检查权限的函数 public void weather() { mFusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity()); try { if (checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATI

我必须在运行时检查片段中的权限以获取位置。 这里有一个检查权限的函数

    public void weather() {
    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity());

    try {
        if (checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

             requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 123);

            return;
        }
        mFusedLocationClient.getLastLocation()
                .addOnSuccessListener(getActivity(), new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {

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

                        }
                    }
                });
        return;

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

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 123) {
        weather();
    }
}

在onRequestPermissionsResult中尝试以下条件

if (requestCode == 123 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        weather();
    }
您可以删除并设置
ActivityCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS_\u位置)!=PackageManager.PERMISSION\u已授予
,因为它属于同一权限组,具有访问权限\u FINE\u位置

请尝试此操作

@Override
public void onRequestPermissionsResult(int requestCode,
                                       @NonNull String permissions[],
                                       @NonNull int[] grantResults) {
    if (requestCode == 123) {
        if (grantResults.length == 1 &&
                grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            weather();

        } else {
            Toast.makeText(getActivity(), "Permission denied", oast.LENGTH_SHORT).show();
        }
    }
}

我不太确定,你可以尝试添加ActivityCompat作为前缀,比如ActivityCompat.checkSelfPermission和ActivityCompat.requestPermissions,然后再试一次吗?它不起作用。。。在低于棉花糖的Android版本上!
if(requestCode==123){
中的幻数123来自哪里?@M.ArslanKhan Try FragmentCompat.requestPermissions?使用Rxpermission'com.tbruyelle.rxpermissions:rxpermissions:0.7。0@aar'
@Override
public void onRequestPermissionsResult(int requestCode,
                                       @NonNull String permissions[],
                                       @NonNull int[] grantResults) {
    if (requestCode == 123) {
        if (grantResults.length == 1 &&
                grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            weather();

        } else {
            Toast.makeText(getActivity(), "Permission denied", oast.LENGTH_SHORT).show();
        }
    }
}