2013-07-30 113 views
14

我目前的任务是从SD卡中选择一个音频文件URI。你们可以请求帮助我解决这个问题吗?您的帮助将非常感激。谢谢拾取音频文件android

编辑

我要接收来自SD卡的音频文件并进行播放。我认为我可以通过获取音频文件的URI来执行此任务。所以,来接我使用下面的代码块中的音频文件:

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

现在我可以浏览音频文件,我可以选择它。

问题:如何在我的onActivityResult中读取采摘文件的URI?

谢谢

+0

我正在从过去的2-3个小时。但我不知道锄头来获取URI。我能够打开声音选择器后,选择任何声音如何获得其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(intent,1); 改为使用intent_upload.setType(“audio/*”);其余部分都很好。 谢谢 – enam

+0

这对.opus文件不起作用 – Borja

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

更换/Audio/abc.mp3your 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