2013-07-30 5 views
14

私の現在の仕事は、オーディオファイルURIをsdcardから選ぶことです。あなたはこの質問で私を助けてくれるのですか?あなたの助けは非常に高く評価されます。私はSDカードからオーディオファイルを受信し、それを再生する必要がオーディオファイルをピックアップするandroid

EDIT

、ありがとうございました。私は、オーディオファイルのURIを取得することでこの作業を実行できると考えました。だから、私は次のコードブロックを使用しているオーディオファイルを選択する:

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

私はオーディオファイルを閲覧することができ、それを選択することができます。

質問:私のonActivityResultで取り出されたファイルのURIを読み取るにはどうすればいいですか?

+0

以下のように、同じ活動にonActivityResultオーバーライドします。しかし、私は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); 

そして、私が最後の2〜3時間からそれに取り組んでいます

@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 =新しい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"); 

ありがとうyour path of mp3 file on sdcard/Audio/abc.mp3を交換してください。

外部ストレージが搭載されているかどうかを確認してください。 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

関連する問題