danka
danka

Reputation: 19

FragmentTransaction.add(0, request); crashes for android:compileSdkVersion="26" or above

I started learning android development and am still not that familiar with Java code. I would like to request permission dynamically using the following code which is from http://www.bytran.org/androidmpermissions.htm I used android-support-v4.jar to run this Java code.

It works fine if I set android:compileSdkVersion="25" in AndroidManifest.xml But if I set android:compileSdkVersion="26" or above, crashes at fragmentTransaction.add(0, request); Is there any way I can make it work for android:compileSdkVersion="33"?

Here is the code

 public void askPermissions(Activity currentActivity)
    {
        final List<String> permissionsList = new ArrayList<String>();
        if (currentActivity.checkCallingOrSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
            permissionsList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
        }
        if (currentActivity.checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }

        final FragmentManager fragmentManager = currentActivity.getFragmentManager();
        final Fragment request = new Fragment() {
            @Override public void onStart()
            {
                super.onStart();
                // Checking the read and write permissions
                if (!permissionsList.isEmpty())
                {
                    requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                }
                else
                {
                    // Emitting a signal indicating that the permissions have been granted
                    responseStateStr = "Granted";
                }
            }
            @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
            {
                ...
                ...
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.remove(this);
                fragmentTransaction.commit();
            }
        };
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(0, request);
        fragmentTransaction.commit();
    }
 

Expected behaviors are

  1. requestPermissions() is excuted.
  2. Code does not crashes.

Upvotes: 1

Views: 29

Answers (0)

Related Questions