Hello there,
- I have a custom android app that allows uploading of files (pdf,excel,doc,images).
 - I'm able to upload such files from any path on the device until I was using Android 10. Now my device is upgraded to android 11, and I am facing uploading issue.
 - I am able to pick file attachments from Downloads folder but not able to pick any attachments from other folders and external folders on the Andorid 11 device. I am facing this issue in my physical device as well as on Android Emulator . It will be of great help if someone helps me out on this issue.
 
Here is the source code of my Application for reference
MainActivity.java
public void addFiles() {
    if (AppUtils.storageInitialCheck(getActivity())) {
        AppUtils.storagePermisson(getActivity());
    } else {
        picupFile(AppUtils.intentSelect.ADD_HOME_WORK_FILE_UPLOAD);
    }
}
public void picupFile(int fileUpload) {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");
    try {
        startActivityForResult(
                Intent.createChooser(intent, "Select a File to Upload"), fileUpload);
    } catch (android.content.ActivityNotFoundException ex) {
        // Potentially direct the user to the Market with a Dialog
        AppLog.LOGE("Exception");
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    AppLog.LOGE("onActivityResult() called with: requestCode = [" + requestCode + "], resultCode = [" + resultCode + "], data = [" + data + "]");
    if (requestCode == AppStrings.uploadPic.PROFILE_PIC_SELECTION_RESULT) {
        if (data != null) {
            String path = data.getExtras().getString(AppStrings.uploadPic.selected_image_path);
            SelectedPicModel model = new SelectedPicModel();
            model.setImage_id("0");
            model.setImage_path(path);
            selectedPicArrayList.add(model);
            AppLog.LOGE("selected_image_path--->" + path);
            AppLog.LOGE("onActivityResult:111--> " + AppUtils.getFilesize(path));
            adapter.notifyDataSetChanged();
            updateAddpicbutton();
        }
    }
    else if (resultCode == Activity.RESULT_OK && requestCode == AppUtils.intentSelect.ADD_HOME_WORK_FILE_UPLOAD) {
        String path = "";
        try {
            Uri uri = data.getData();
            if(uri==null)
            {
                Toast.makeText(getContext(),"URI is NULL",Toast.LENGTH_LONG).show();
            }
            else {
                AppLog.LOGE("URI-------------->"+uri);
            }
            path = AppUtils.getfilePath(getContext(), uri);
            AppLog.LOGE("FILE PATH ---->"+path);
            if (path != null) {
                SelectedPicModel model = new SelectedPicModel();
                model.setImage_id("0");
                model.setImage_path(path);
                selectedPicArrayList.add(model);
                AppLog.LOGE("selected_image_path--->" + path);
                AppLog.LOGE("onActivityResult:111--> " + AppUtils.getFilesize(path));
                adapter.notifyDataSetChanged();
                updateAddpicbutton();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (requestCode == Appintegers.NotbrdStudentsActivity) {
        sendstudeintIds = "";
        if (data != null) {
            student_array = (ArrayList<StudentsModel>) data.getSerializableExtra(AppStrings.intentData.student_array);
            getSelectedIds(student_array);
            if (getSelectedNames(student_array).equals("")){
                selected_student_tv.setText(getResources().getString(R.string.select_students));
            }else {
                selected_student_tv.setText(getSelectedNames(student_array));
            }
        }
    }
}
AppUtils.java
public static String getfilePath(final Context context, final Uri uri) {
    // DocumentProvider
    if (DocumentsContract.isDocumentUri(context, uri)) {
        // ExternalStorageProvider
        if (isExternalStorageDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];
            if ("primary".equalsIgnoreCase(type)) {
                return Environment.getExternalStorageDirectory() + "/" + split[1];
            }
            // TODO handle non-primary volumes
        }
        // DownloadsProviderString[] contentUriPrefixesToTry
        else if (isDownloadsDocument(uri)) {
            String fileName = getFilePath1(context, uri);
            if (fileName != null) {
                return Environment.getExternalStorageDirectory().toString()+"/Download/"+fileName;
            }
            final String id = DocumentsContract.getDocumentId(uri);
            String[] contentUriPrefixesToTry = new String[]{
                    "content://downloads/public_downloads",
                    "content://downloads/my_downloads",
                    "content://downloads/all_downloads"
            };
            for (String contentUriPrefix : contentUriPrefixesToTry) {
                Uri contentUri = ContentUris.withAppendedId(Uri.parse(contentUriPrefix), Long.valueOf(id));
                AppLog.LOGV("contentUri---->" + contentUri);
                try {
                    String path = getDataColumn(context, contentUri, null, null);
                    AppLog.LOGV("1.contentUri path---->" + path);
                    if (path != null) {
                        AppLog.LOGV("2.contentUri matched path---->" + path);
                        return path;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        // MediaProvider
        else if (isMediaDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];
            Uri contentUri = null;
            if ("image".equals(type)) {
                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            } else if ("video".equals(type)) {
                contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            } else if ("audio".equals(type)) {
                contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            }
            final String selection = "_id=?";
            final String[] selectionArgs = new String[]{
                    split[1]
            };
            return getDataColumn(context, contentUri, selection, selectionArgs);
        }
    }
    // MediaStore (and general)
    else if ("content".equalsIgnoreCase(uri.getScheme())) {
        return getDataColumn(context, uri, null, null);
    }
    // File
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }
    return null;
}
public static String getDataColumn(Context context, Uri uri, String selection,
                                   String[] selectionArgs) {
    Cursor cursor = null;
    final String column = "_data";
    final String[] projection = {
            column
    };
    try {
        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,null);
        if (cursor != null && cursor.moveToFirst()) {
            final int column_index = cursor.getColumnIndexOrThrow(column);
            return cursor.getString(column_index);
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
    return null;
}
- If i try to pick file from folders apart from DOWNLOADS or from external storage the file path i am getting null (Please refer MainActivity.java code & also mentioned filepath in the AppLog).
 
It will be great help if someone helps me out on this issue.