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?