Android requestPermission未显示在支持片段中

Android requestPermission未显示在支持片段中,android,android-fragments,android-appcompat,Android,Android Fragments,Android Appcompat,我知道这个问题已经被问了很多次了,但是没有一种方法对我有效。我有一个v4.nested片段,我正在调用requestPermission,但我甚至没有显示对话框,因此onRequestPermissionsResult没有被调用。我已经尝试在我的活动和片段中调用onRequestPermissionsResult,但没有任何效果。我使用的是appcompat-v7:23.3.0,因此我希望出现对话框,从而得到结果。有什么帮助吗?谢谢 代码 ask()方法是通过点击SetClickListener

我知道这个问题已经被问了很多次了,但是没有一种方法对我有效。我有一个v4.nested片段,我正在调用requestPermission,但我甚至没有显示对话框,因此onRequestPermissionsResult没有被调用。我已经尝试在我的活动和片段中调用onRequestPermissionsResult,但没有任何效果。我使用的是appcompat-v7:23.3.0,因此我希望出现对话框,从而得到结果。有什么帮助吗?谢谢

代码


ask()方法是通过点击SetClickListener上的按钮来调用的,LogA和LogB正在记录,但权限对话框没有显示。

它可能有点类似,但我在那里尝试了所有方法,但都没有成功。我也在使用API 23而不是M预览版。你能发布相关代码吗?@AnirudhaAgashe,我已经添加了相关代码。另外,为了让您知道,我已经在AndroidManifest中声明了权限。
public void ask(){
    Log.e("Here", "Permission");
    if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED &&
            ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) ==
                    PackageManager.PERMISSION_GRANTED) {
        Log.e("Here", "Granted");

        if (what == 1){
            PackageManager pm = getActivity().getPackageManager();
            if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
                Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                getActivity().startActivityForResult(i, CAMERA_PIC_REQUEST);
            } else {
                Toast.makeText(getActivity(), "Can't detect Camera on device", Toast.LENGTH_LONG).show();
            }
        }
        else{
            Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            getActivity().startActivityForResult(i, RESULT_LOAD_IMAGE);
        }
    }
    else{
        Log.e("Here", "Ask");
        if (useRuntimePermissions()) {
            if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                showMessageOKCancel("You need to allow access to Device Storage",
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 3);
                                Log.e("A", "ash");
                            }
                        });
            } else {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},2);
                Log.e("B", "Should be Asked by now");
            }
        }
    }
}

private boolean useRuntimePermissions() {
    return(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1);
}

private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
    new android.support.v7.app.AlertDialog.Builder(getActivity())
            .setMessage(message)
            .setPositiveButton("OK", okListener)
            .setNegativeButton("Cancel", null)
            .create()
            .show();
}

@Override
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
   Log.e("Hehe", "results"+String.valueOf(requestCode));
    switch (requestCode) {
        case CAM_REQUEST: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                if (what == 1){
                    PackageManager pm = getActivity().getPackageManager();
                    if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
                        Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                        getActivity().startActivityForResult(i, CAMERA_PIC_REQUEST);
                    } else {
                        Toast.makeText(getActivity(), "Can't detect Camera on device", Toast.LENGTH_LONG).show();
                    }
                }
                else{
                    Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    getActivity().startActivityForResult(i, RESULT_LOAD_IMAGE);
                }
            }
            else {
                Toast.makeText(getActivity(), "Camera Request not granted. Please enable it at App Settings", Toast.LENGTH_LONG).show();
            }
            return;
        }
    }
}