I need to fetch an audio file from SD Card and play it. I think this can be done by getting URI of an audio file. So, to pick an audio file I'm using following code:
Intent intent = new Intent();
intent.setType("audio/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Audio "), reqCode);
Now, I can browse for audio files and select one of them.
QUESTION: How to read the URI of picked file in my onActivityResult?
Choose Open from the File menu or hold down the Control key and press ``o'' with the mouse cursor over the Audio main window. The Audio-Open File dialog box is displayed. Navigate to the folder where the audio file is located.
The audio files are stored in botht the res/raw directory and the asset directory.
id. mylist); myList = new ArrayList<String>(); File directory = Environment. getExternalStorageDirectory(); file = new File( directory + "/Test" ); File list[] = file. listFiles(); for( int i=0; i< list.
You can put below codes in your project when you want to select audio.
Intent intent_upload = new Intent(); intent_upload.setType("audio/*"); intent_upload.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent_upload,1);
And override onActivityResult in the same Activity, as below
@Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ if(requestCode == 1){ if(resultCode == RESULT_OK){ //the selected audio. Uri uri = data.getData(); } } super.onActivityResult(requestCode, resultCode, data); }
first of all open gallery through intent - public void openGalleryForAudio() { Intent videoIntent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); startActivityForResult(Intent.createChooser(videoIntent, "Select Audio"), AUDIO_REQUEST); } Then onActivityResult you should catch data - if (requestCode == AUDIO_REQUEST && null != data) { if (requestCode == AUDIO_REQUEST) { Uri uri = data.getData(); try { String uriString = uri.toString(); File myFile = new File(uriString); // String path = myFile.getAbsolutePath(); String displayName = null; String path2 = getAudioPath(uri); File f = new File(path2); long fileSizeInBytes = f.length(); long fileSizeInKB = fileSizeInBytes / 1024; long fileSizeInMB = fileSizeInKB / 1024; if (fileSizeInMB > 8) { customAlterDialog("Can't Upload ", "sorry file size is large"); } else { profilePicUrl = path2; isPicSelect = true; } } catch (Exception e) { //handle exception Toast.makeText(GroupDetailsActivity.this, "Unable to process,try again", Toast.LENGTH_SHORT).show(); } // String path1 = uri.getPath(); } } This function is use for absolute path of audio file private String getAudioPath(Uri uri) { String[] data = {MediaStore.Audio.Media.DATA}; CursorLoader loader = new CursorLoader(getApplicationContext(), uri, data, null, null, null); Cursor cursor = loader.loadInBackground(); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); }
No need to add type here like audio/*. It will crash to search such type of action. Try this. It worked for me.
val intent = Intent(Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI)
startActivityForResult(intent, AUDIO_REQUEST_CODE)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With