Can MediaStore.EXTRA_OUTPUT be used with Intent.ACTION_GET_CONTENT

Viewed 162
public void startAudioIntent(){
    Intent audioIntent = new Intent();
    audioIntent.setAction(Intent.ACTION_GET_CONTENT);
    audioIntent.setType("audio/*");
    mAudioFile = new File(getActivity().getFilesDir(),"xyz");
    Log.d(TAG, "startAudioIntent: "+mAudioFile.getAbsolutePath());
    Uri uri = FileProvider.getUriForFile(getActivity(),"com.rgdgr8.beatbox.fileprovider",mAudioFile);
    audioIntent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
    List<ResolveInfo> audioActivities = getActivity()
            .getPackageManager().queryIntentActivities(audioIntent,
                    PackageManager.MATCH_DEFAULT_ONLY);
    for (ResolveInfo activity : audioActivities) {
        getActivity().grantUriPermission(activity.activityInfo.packageName,
                uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    }

    activityResultLauncher.launch(audioIntent);
}

I launch the implicit intent and I'm expecting to get the user selected file in my app's private files folder service by my FileProvider

activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    if (result.getData()!=null && result.getResultCode() == Activity.RESULT_OK){
                        Uri uri = result.getData().getData();
                        Log.d(TAG, "onActivityResult: "+uri.getPath());
                        if (!isUsableAudio(uri.getPath())){
                            Toast.makeText(getActivity(), "Add a .wav or .mp3 file only !!", Toast.LENGTH_LONG).show();
                            return;
                        }

                        String path = getPath(uri);
                        Log.d(TAG, "onActivityResult: "+path);
                        int pos = mBeatBox.addSound(path);
                        adapter.notifyItemInserted(pos);

                        String fileName = mBeatBox.getSounds().get(pos).getFileNameWithExtension();
                        Log.d(TAG, "onActivityResult: "+fileName);
                        File renamedFile = new File(getActivity().getFilesDir(),fileName);
                        Log.d(TAG, "onActivityResult: "+renamedFile.getAbsolutePath());
                        if (!mAudioFile.renameTo(renamedFile))
                            Toast.makeText(getActivity(), "Failed to rename file", Toast.LENGTH_SHORT).show();

                        Uri revokeUri = FileProvider.getUriForFile(getActivity(), "com.rgdgr8.beatbox.fileprovider", mAudioFile);
                        getActivity().revokeUriPermission(revokeUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                    }
                }
            });

But I don't see any files in the desired location. I don't understand why.

Is MediaStore.EXTRA_OUTPUT only usable with MediaStore actions?

Can I not use MediaStore.EXTRA_OUTPUT with Intent.ACTION_GET_CONTENT?

1 Answers
Related