2014-01-29 7 views
3

Извините, если это уже был дан ответ, но я не могу задать свой вопрос очень хорошо. У меня есть активность, которая требует файла песни с вашего устройства, и я хочу, когда я нажму кнопку, чтобы открыть диалоговое окно, чтобы спросить вас, как вы хотите открыть файл (например, выбрать файл-проводник), а затем пользователь будет выберите mp3-файл (необходимо ввести как внутреннюю память, так и внешнюю, по крайней мере те, которые доступны для пользователей, например, в моем Xperia V, который имеет 2 внутренних раздела и SD-карту) и когда выбран музыкальный файл (. wav, .mp3, .acc), чтобы загрузить его имя и путь к файлу в моем приложении. Как мне это сделать? Я не предоставляет какой-либо код, потому что это все, что мне нужноAndroid выбрать mp3-файл

ответ

11

Я использую следующую команду, чтобы выбрать файл mp3:

Intent intent; 
intent = new Intent(); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
intent.setType("audio/mpeg"); 
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_audio_file_title)), REQ_CODE_PICK_SOUNDFILE); 

, а затем вы можете получить Uri назад в onActivityResult:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQ_CODE_PICK_SOUNDFILE && resultCode == Activity.RESULT_OK){ 
     if ((data != null) && (data.getData() != null)){ 
      Uri audioFileUri = data.getData(); 
      // Now you can use that Uri to get the file path, or upload it, ... 
      } 
     } 
} 

Я считаю, что выбор других типов аудиофайлов был бы вопросом установки дикой карты в MIME-типе, делая intent.setType("audio/*), хотя я не тестировал это.

Пожалуйста, дайте мне знать, если это работает для вас ;-)

+0

что такое REQ_CODE_PICK_SOUNDFILE –

+0

Это код запроса, который используется как в startActivityForResult, так и inActivityResult, чтобы помочь определить, какой результат вы получаете (очень полезно, если вы можете начать различные действия, чтобы получить разные типы результатов t, например, один для выбора аудиофайлов, другой - для выбора или снятия картинки и т. д.). Официальная документация: http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int) – 2Dee

-2

Незначительные Поправка к ответу 2Dee в:

Intent audiofile_chooser_intent; 
    audiofile_chooser_intent = new Intent(); 
    audiofile_chooser_intent.setAction(Intent.ACTION_GET_CONTENT); 
    audiofile_chooser_intent.setType("audio/*"); 
    ActivityOptions options = ActivityOptions.makeScaleUpAnimation(view, 0, 
      0, view.getWidth(), view.getHeight()); 
    startActivityForResult(Intent.createChooser(audiofile_chooser_intent, getString(R.string.select_audio_file_title)), RQS_OPEN_AUDIO_MP3, options.toBundle()); 

    Toast("File Chooser initiated.."); 

Намерение внутри метода слушателя OnClick, чтобы начать FileChooser активность/Dialog

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == RQS_OPEN_AUDIO_MP3) { 
      Uri audioFileUri = data.getData(); 

      String MP3Path = audioFileUri.getPath(); 
      Toast(MP3Path); 


     } 
    } 
} 

Метод OnActivityResult для получения FilePath выбранного файла для последующего использования

+2

Позвольте мне исправить это: вы «исправление» должны удалить расширение файла mpeg из типа файла, чтобы выбрать? Как это исправляет мой ответ? Как это улучшает его? Вы даже не знаете, что делает ваш код? Почему вы добавили ActivityOptions.makeScaleUpAnimation и почему необходимо выбрать mp3-файл? Так много вопросов, и я, вероятно, никогда не получу ответа. Ах, радости SO :-) – 2Dee

+0

Вам понадобился год, чтобы заметить это: P @ 2Dee – grant

1

Чтобы открыть файл эксплорер, requestCode только целое число, так что для сакэ, пройти 1

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("audio/*"); // specify "audio/mp3" to filter only mp3 files 
startActivityForResult(intent,1); 

Настройка Media Player,

MediaPlayer player = new MediaPlayer(); 
player.setAudioStreamType(AudioManager.STREAM_MUSIC); 

Fetch результата файл из проводника,

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

/*check whether you're working on correct request using requestCode , In this case 1*/ 

    if(requestCode == 1 && resultCode == Activity.RESULT_OK){ 
     audio = data.getData(); //declared above Uri audio; 
     Log.d("media", "onActivityResult: "+audio); 
    } 

    super.onActivityResult(requestCode, resultCode, data); 
} 

Start Воспроизведение аудио,

player.setDataSource(new FileInputStream(new File(audio.getPath())).getFD()); 

player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mediaPlayer) { 
        player.start(); 
       } 
      }); 

player.prepareAsync(); 

Чтобы остановить аудио,

if(player.isPlaying()) 
      player.stop(); 

Наконец, добавить разрешение в манифесте для чтения внешних файлов,

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

Добавьте виджеты контроллер и играть с методами MediaPlayer, чтобы создать настраиваемую MP3-плеер;)

+0

Я пробую ваши решения, но не знаю, почему эта ошибка:/document/802: open failed: ENOENT (Нет такого файла или каталог) –

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