在授予写入权限后,应用程序首次崩溃?

时间:2017-11-07 08:15:07

标签: android android-permissions bottom-sheet

我在第一页结构化,在获得许可后不能立即打开Dialog(写入)。我第一次询问Permission并且我授予Permission,在onRequestPermissionsResult()中我打开了Dialog,这里App关闭了,遗憾的是APP崩溃了。当重新打开应用程序问题不在这里,它正常运行。我在监视器中遇到问题 Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
。我搜索了很多,但我已经看过不同的答案。请帮助我,我不知道为什么应用程序第一次崩溃。 这是我的代码:

 llAddPhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!tvAddPhotoOrNext.getText().toString().equals("Next")) { // When Image not gone selected
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        //First checking if the app is already having the permission
                        if (isReadStorageAllowed()) {
                            //If permission is already having then showing the toast
                            Toast.makeText(AddUserProfilePic.this, "You already have the permission", Toast.LENGTH_LONG).show();
                            //Existing the method with return
                            showFourButtonsBSDialog();
                        }else {
                            //If the app has not the permission then ask for the permission
                            checkPermissions();
                        }
                    } else
                        showFourButtonsBSDialog();
                } else {        // When image gone selected.
                    mSetProfilePicByAPI();
                }

            }
        });


@SuppressLint("InlinedApi")
private void checkPermissions() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PICKIMAGE);
    } else {

    }
}


 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    switch (requestCode) {
        case REQUEST_PICKIMAGE:
            //If permission is granted
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //Displaying a toast
                Toast.makeText(this, "Permission granted now you can read the storage", Toast.LENGTH_LONG).show();
                showFourButtonsBSDialog();
            } else {
                //Displaying another toast if permission is not granted
                Toast.makeText(this, "Oops you just denied the permission", Toast.LENGTH_LONG).show();
            }
    }
}


   /* BottomSheetDialog */
private void showFourButtonsBSDialog() {

    MoreOptionsDialogFragment mTBFragment  = new MoreOptionsDialogFragment();   // ThreeButtonsFragment
    Bundle mTextNamesArgs = new Bundle(); //Send buttons names
    mTextNamesArgs.putStringArray("buttons_names",new String[]{"Take Photo","Choose from library",
    "Photo from Facebook","Photo from Instagram"});
    mTBFragment.setArguments(mTextNamesArgs);
    mTBFragment.show(getSupportFragmentManager(),mTBFragment.getTag());
}


 private boolean isReadStorageAllowed() {
    //Getting the permission status
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
    //If permission is granted returning true
    if (result == PackageManager.PERMISSION_GRANTED)
        return true;
    //If permission is not granted returning false
    return false;
}

1 个答案:

答案 0 :(得分:0)

您的编译SDK和目标SDK版本是什么?确保它们是23或更高。 https://developer.android.com/guide/topics/permissions/requesting.html