Android 从文件夹中获取音频

Android 从文件夹中获取音频,android,audio,media-player,alarmmanager,Android,Audio,Media Player,Alarmmanager,我有一个闹钟,想让用户选择音乐。 我有一个带有一些代码的活动,包括以下片段: Button ring_button = (Button) findViewById(R.id.button2); ring_button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub

我有一个闹钟,想让用户选择音乐。 我有一个带有一些代码的活动,包括以下片段:

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);
    }
});
还有一个带有警报的活动,它扩展到了广播接收器,在这里,我将通过带有音乐的对话框窗口开始下一个活动。 这是:

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();
    }

}

我怎么能意识到这一点?我必须从第一个活动或smth else中获取一些额外内容?

在您使用
操作调用
startActivityForResult
获取内容
意图后,您应该在同一类中覆盖
onActivityResult
,并获取所选文件的路径。获得路径后,您可以保存到共享首选项,并轻松地从另一个活动(例如在
对话框窗口
)中检索并使用
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
}
从共享首选项还原文件路径:

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
}

如果理解正确,您的问题是将所选文件从一个活动/片段传输到另一个活动/片段?@cylon是的。并将此文件与MediaPlayer classi一起使用。我已经尝试过,但没有播放任何内容。可能是我没有将文件路径正确保存到SharedReferences?我添加了一个如何保存和恢复文件路径的示例。请在将文件路径保存到shared pref之前以及还原之后添加日志。让我们看看是否一切都好。在这里发布它的值。同时检查日志,检查媒体播放器是否抛出异常