如何在Android中的片段中使用Handel位置权限

时间:2017-05-19 09:06:14

标签: android android-fragments

我正在创建一个应用程序,其中我无法处理片段中的位置权限。方法“public void onRequestPermissionsResult(int requestCode String permissions [],int [] grantResults){}”在片段中不起作用。所以请帮助我如何处理“DENY”和“ALLOW”权限。这是我的代码......

public class BlankFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_blank, container, false);

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        checkLocationPermission();
    }

    return v;
}



public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99;
public boolean checkLocationPermission(){
    if (ContextCompat.checkSelfPermission(getActivity(),
            Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        // Asking user if explanation is needed
        if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
                Manifest.permission.ACCESS_FINE_LOCATION)) {


            //Prompt the user once explanation has been shown
            ActivityCompat.requestPermissions(getActivity(),
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSIONS_REQUEST_LOCATION);


        } else {
            // No explanation needed, we can request the permission.
            ActivityCompat.requestPermissions(getActivity(),
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSIONS_REQUEST_LOCATION);
        }
        return false;
    } else {
        return true;
    }
}

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_LOCATION: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // Permission was granted.
                if (ActivityCompat.checkSelfPermission(getActivity(),
                        Manifest.permission.ACCESS_FINE_LOCATION)
                        == PackageManager.PERMISSION_GRANTED) {


                }

            } else {

                // Permission denied, Disable the functionality that depends on this permission.
                Toast.makeText(getActivity(), "permission denied", Toast.LENGTH_LONG).show();
            }
            return;
        }

    }
}

}

请帮我解决如何处理片段中的两个权限。

谢谢..

2 个答案:

答案 0 :(得分:1)

从代码中删除ActivityCompat后尝试此操作。

SimpleDateFormat

}

答案 1 :(得分:1)

AFAIK,您应该使用此PermissionsDispatcher来请求运行时权限。您只需要在Fragment中定义回调函数,如下所示:

@NeedsPermission(Manifest.permission. ACCESS_FINE_LOCATION)
void showCamera() {
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())
            .addToBackStack("camera")
            .commitAllowingStateLoss();
}

@OnShowRationale(Manifest.permission. ACCESS_FINE_LOCATION)
void showRationaleForCamera(final PermissionRequest request) {
    new AlertDialog.Builder(this)
        .setMessage(R.string.permission_camera_rationale)
        .setPositiveButton(R.string.button_allow, (dialog, button) -> request.proceed())
        .setNegativeButton(R.string.button_deny, (dialog, button) -> request.cancel())
        .show();
}

@OnPermissionDenied(Manifest.permission. ACCESS_FINE_LOCATION)
void showDeniedForCamera() {
    Toast.makeText(this, R.string.permission_camera_denied, Toast.LENGTH_SHORT).show();
}

@OnNeverAskAgain(Manifest.permission. ACCESS_FINE_LOCATION)
void showNeverAskForCamera() {
    Toast.makeText(this, R.string.permission_camera_neverask, Toast.LENGTH_SHORT).show();
}

然后使用auto-gen方法请求权限:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.button_camera).setOnClickListener(v -> {
      // NOTE: delegate the permission handling to generated method
      MainActivityPermissionsDispatcher.showCameraWithCheck(this);
    });
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    // NOTE: delegate the permission handling to generated method
    MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}

您应该仔细阅读图书馆以获取更多详细信息。