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之前以及还原之后添加日志。让我们看看是否一切都好。在这里发布它的值。同时检查日志,检查媒体播放器是否抛出异常