I'm trying to update my app to work with androids new scoped storage rules in Android 10 and up, but am having the hardest time with it. I know I need to rebuild my app with new versions of java, but I just want to get it to work while I study and learn enough to do so. In a nutshell, I really need help. I have read so many different ways to make scoped storage work, and everybody seems to be doing it differently.
Just for clarification, what I am trying to do with the uri is both display in an imageview, then upload to database.
This code is working to take a picture and select images and videos in android 9, but in android 10, it only works when camera component captures a picture or a video. When a user selects an image or video from file, it returns a null pointer exception. Because I am pretty sure the error is in how I am dealing with the different chooser intents, I have shown the on result code first.
I have been unable to find a clear example of how to retrieve a usable image or video uri in android 10. If anybody can help, I would really appreciate it. I know I have much to learn.
if ((new java.io.File(_filePath)).exists()){
} else {
_filePath = vidfile.getAbsolutePath();
if ((new java.io.File(_filePath)).exists()){
} else {
            ArrayList<String> _filePath_1 = new ArrayList<>();
            if (_data != null) {
                if (_data.getClipData() != null) {
                    for (int _index = 0; _index < _data.getClipData().getItemCount(); _index++) {
                        ClipData.Item _item = _data.getClipData().getItemAt(_index);
                        _filePath_1.add(FileUtil.convertUriToFilePath(getApplicationContext(), 
_item.getUri()));
                    }
                }
                else {
                    _filePath_1.add(FileUtil.convertUriToFilePath(getApplicationContext(), 
_data.getData()));
                }
            }
_filePath = _filePath_1.get((int)0);
}
}
Just in case I am wrong, here is the code for the click event to launch the chooser...
SimpleDateFormat date1 = new SimpleDateFormat("yyyyMMdd_HHmmss");
String fileName1 = date1.format(new Date()) + ".jpg";
picfile = new 
File(getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DCIM).getAbsolutePath() + 
File.separator + fileName1);
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri _uri_camr1 = null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        _uri_camr1 = FileProvider.getUriForFile(getApplicationContext(), 
getApplicationContext().getPackageName() + ".provider", picfile);
    }
    else {
        _uri_camr1 = Uri.fromFile(picfile);
    }
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, _uri_camr1);
    takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
SimpleDateFormat date2 = new SimpleDateFormat("yyyyMMdd_HHmmss");
String fileName2 = date2.format(new Date()) + ".mp4";
vidfile = new 
File(getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DCIM).getAbsolutePath() + 
File.separator + fileName2);
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
Uri _uri_camr2 = null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        _uri_camr2 = FileProvider.getUriForFile(getApplicationContext(), 
getApplicationContext().getPackageName() + ".provider", vidfile);
    }
    else {
        _uri_camr2 = Uri.fromFile(vidfile);
    }
    takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, _uri_camr2);
    takeVideoIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
 contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
contentSelectionIntent.setType("*/*");
contentSelectionIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Intent[] intentArray = new Intent[]{ takePictureIntent, takeVideoIntent}; 
chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent); 
chooserIntent.putExtra(Intent.EXTRA_TITLE, "Choose an action"); 
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); 
startActivityForResult(chooserIntent, REQ_CD_CAMR);