简体   繁体   English

在运行时请求权限Android Marshmallow无法正常工作

[英]Requesting Permission at run time Android Marshmallow not working

i disabled the location of mobile but it still show Location already granted in the toast. 我禁用了移动设备的位置,但它仍然显示已在吐司中授予的位置。

 @Override
public void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
    if(Build.VERSION.SDK_INT>=23){

        showRunTimePermission();
    }
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_search_v2, container,
            false);




    return view;
}

//shows alert dialog if location is disabled. //如果禁用位置,则显示警告对话框。

private void showRunTimePermission() {
   if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED ||
           ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){
       requestLocationPermission();
   }else{
       Toast.makeText(getActivity(), "Location already granted", Toast.LENGTH_SHORT).show();
   }

}

private void requestLocationPermission() {
    if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),Manifest.permission.ACCESS_COARSE_LOCATION) || ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),Manifest.permission.ACCESS_FINE_LOCATION)){
        final AlertDialog locationDialog = new AlertDialog.Builder(getActivity())
                .setCancelable(false).create();
        View dialogView = View.inflate(getActivity(), R.layout.dialog_location_access, null);
        TextView okBtn= (TextView) dialogView.findViewById(R.id.dialog_location_ok_button);
        okBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ActivityCompat
                        .requestPermissions(getActivity(), PERMISSIONS_LOCATION,
                                LOCATION_PERMISSIONS_REQUEST);
            }
        });
        TextView denyBtn= (TextView) dialogView.findViewById(R.id.dialog_location_deny_button);
        denyBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                locationDialog.dismiss();
            }
        });

        locationDialog.setView(dialogView);

        locationDialog.show();

    }else{
        ActivityCompat.requestPermissions(getActivity(), PERMISSIONS_LOCATION,
                LOCATION_PERMISSIONS_REQUEST);
    }
}

// if the location is on or off the toast will appear accordingly. //如果位置打开或关闭,吐司将相应地出现。

    @Override
public void onRequestPermissionsResult(int requestCode, String[]        permissions, int[] grantResults) {
    if (requestCode==LOCATION_PERMISSIONS_REQUEST){
        if (grantResults.length == 1 &&
                grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(getActivity(), "Location granted", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getActivity(), "Location permission denied", Toast.LENGTH_SHORT).show();
        }
    }else {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

}

Enabled location and granted permission for location are two different things. 启用位置和授予位置权限是两回事。 To check if location is enabled: How to check if Location Services are enabled? 要检查位置是否已启用: 如何检查是否已启用位置服务?

Well, In this before asking permission you need to check that whether permission is granted or not and then you have to ask permission! 那么,在获得许可之前,您需要检查是否授予了许可,然后您必须征得许可!

Try this Library this will help you to ask permission Automatically you just need to pass permission Name. 试试这个库,这将帮助您自动询问权限,您只需要传递权限名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM