2013-07-30 3 views
14

Моя текущая задача - выбрать аудиофайл URI из sdcard. Можете ли вы, ребята, помочь мне в этом вопросе. Ваша помощь будет очень оценена. СпасибоПодбор аудиофайла android

EDIT

Я должен получить звуковой файл с карты памяти SD и играть. Я думал, что могу выполнить эту задачу, получив URI аудиофайла. Таким образом, чтобы выбрать звуковой файл, я использую следующий блок кода:

Intent intent = new Intent(); 
intent.setType("audio/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent,"Select Audio "), reqCode); 

Теперь я могу просматривать для аудиофайлов, и я могу выбрать его.

ВОПРОС: Как читать URI выбранного файла в моем onActivityResult?

Спасибо

+0

Я работаю на нем за последние 2-3 часа. Но я не знаю мотыгу, чтобы получить URI. Я в состоянии открыть Sound picker, после выбора любого звука, как получить его URI? –

+1

@SanjayJoshi проверить мой ответ. – Bishan

ответ

31

Вы можете ввести коды в свой проект, если хотите выбрать аудио.

Intent intent_upload = new Intent(); 
intent_upload.setType("audio/*"); 
intent_upload.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(intent_upload,1); 

И переопределить onActivityResult в одной и той же деятельности, как показано ниже

@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); 
} 
+0

в соответствии со мной более простой способ: Intent intent = new Intent (Intent.ACTION_PICK, android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); startActivityForResult (намерение, 1); вместо этого use intent_upload.setType ("audio/*"); и остальная часть детали в порядке. спасибо – enam

+0

это не работает для файлов .opus – Borja

0
final Uri uri=Uri.parse(Environment.getExternalStorageDirectory()+"/Audio/abc.mp3"); 

Заменить /Audio/abc.mp3 с your path of mp3 file on sdcard.

Не забудьте проверить, установлено ли внешнее хранилище. Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

0
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); 
    } 
+1

Возможно, вы захотите добавить некоторую информацию, а не только блок кода. – DGarvanski

Смежные вопросы