2015-12-19 2 views
0

У меня есть будильник и вы хотите выбрать пользователя для выбора музыки. У меня есть деятельность с каким-то кодом, включить этот фрагмент:Получение аудио из папки

Button ring_button = (Button) findViewById(R.id.button2); 
ring_button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     Intent intent_for_ring_button = new Intent(); 
     intent_for_ring_button.setAction(Intent.ACTION_GET_CONTENT); 
     File file = new File(REPORTS_DIRECTORY); 
     intent_for_ring_button.setDataAndType(Uri.fromFile(file),"audio/*"); 
     startActivityForResult(Intent.createChooser(intent_for_ring_button,"Open folder"), 0); 
    } 
}); 

и еще одну активности с тревогой, которая проходит BroadcastReceiver, где i`m начиная следующую деятельность с диалоговым окном с музыкой. Вот это:

public class Dialog_window extends ActionBarActivity{ 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dialog_window_bckg); 
     getSupportActionBar().hide(); 
     this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

     final MediaPlayer Alarm_mp3 = MediaPlayer.create(Dialog_window.this, R.raw.data_don_t_sing); 
     Alarm_mp3.start(); 
     Alarm_mp3.setLooping(true); 
     AlertDialog.Builder builder = new AlertDialog.Builder(Dialog_window.this); 
     builder.setTitle("Важное сообщение!") 
       .setMessage("Вставай!") 
       .setIcon(R.drawable.uncle_sam) 
       .setCancelable(false) 
       .setNegativeButton("ОК, встаю, встаю.", 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           dialog.cancel(); 
           Alarm_mp3.stop(); 
           System.exit(0); 
          } 
         }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 

} 

Как я могу понять это? Я должен получить некоторые дополнительные функции от первой активности или что-то еще?

+0

Если правильно понимаю, ваша проблема в том, чтобы передать выбранный файл от одного действия/фрагмента к другому? – cylon

+0

@ cylon да это. и использовать этот файл с классом MediaPlayer –

ответ

0

После того как вы вызвали startActivityForResult с намерением ACTION_GET_CONTENT, вы должны переписать onActivityResult в том же классе и получить путь к выбранному файлу. После того, как у вас есть путь, вы можете сохранить его в общих настройках и легко извлечь из другого действия (например, в вашем Dialog_window) и сыграть с MediaPlayer.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == 0){ // you've set to 0 at startActivityForResult 
     if(resultCode==RESULT_OK){ 
      String filePath = data.getData().getPath(); 
      // save filePath to shared preferences 
     } 
    } 
} 

После того, как вы восстановили внутри другого действия, просто просто воспроизведите его.

String savedPath = ..... ; // retrieve from shared preferences 

//check your saved path, it could be a full path already.. 
//if it is, you don't need to concatenate anything to it 
String fullPath = Environment.getExternalStorageDirectory()+savedPath; 

mediaPlayer = new MediaPlayer(); 
mediaPlayer.setDataSource(fullPath); 
mediaPlayer.prepare(); 
mediaPlayer.start() 

Сохранение путь к файлу общих предпочтений:

SharedPreferences.Editor editor = getSharedPreferences("mypref", MODE_PRIVATE).edit(); 
editor.putString("audioFilePath", filePath); 
editor.commit(); 

Восстановление путь к файлу из общих предпочтений:

SharedPreferences prefs = getSharedPreferences("mypref", MODE_PRIVATE); 
String restoredFilePath = prefs.getString("audioFilePath", null); 
if (restoredFilePath != null) { 
    // here you have the restored file path 
} 
+0

Я пробовал, но ничего не играет. Может быть, я не правильно сохранил свой путь к SharedPreferences? как я могу сделать это правильно? –

+0

Я добавил пример сохранения и восстановления пути к файлу. Пожалуйста, добавьте журнал перед сохранением filePath в общий префикс, а также после его восстановления. Посмотрим, все ли в порядке. Отправьте сюда значения. Также проверьте свой логарифм, проверьте, не сделал ли медиаплеера исключение – cylon

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