我是新手与android但战斗;)我决定写mp3播放器。我的任务有问题。我想从我的文件浏览器中选择一个文件。它实现如下:
A类的活动开始B类的活动。然后几次开始B类活动。每次使用startActivityForResult(intent,REQUEST_CODE)实现它 - 每次请求代码都是相同的。从上一个活动开始,我想回到第一个带有结果的活动。所以我需要关闭目前为止开展的所有活动。因为所有这些都具有相同的REQUEST_CODE,所以我使用了finishActivity(REQUEST_CODE)(在最后一个之前关闭所有)然后结束()(关闭最新的)。结果与finish()相同 - 仅关闭最后一个活动。你能告诉我我的错误在哪里吗?我会非常感激的。这是与问题相关的一些代码。首先,MainActivity.class中的意图是send(在browseFiles方法中)。然后执行FileListActivity.class的代码。下面的FileListActivity.class代码片段就在最后。最后,应该执行MainActivity.class中的onActivityResult。
MainActivity.class
public void browseFiles (View v) throws IOException {
Intent intent = new Intent(this, FileListActivity.class);
intent.putExtra(path, "/");
startActivityForResult(intent, R.integer.REQUEST_CHOOSE_A_SONG);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode,resultCode,data);
switch(requestCode){
case R.integer.REQUEST_CHOOSE_A_SONG:
if(resultCode == RESULT_OK) try {
mediaPlayer.setDataSource(this, Uri.parse(data.getStringExtra(path)) );
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileListActivity.class
if(new File(fileName).isDirectory()){
intent = new Intent(this, FileListActivity.class);
intent.putExtra("path", fileName);
startActivityForResult(intent, R.integer.REQUEST_CHOOSE_A_SONG);
}
else {
intent = new Intent();
intent.putExtra("path", fileName);
setResult(RESULT_OK, intent);
finishActivity(R.integer.REQUEST_CHOOSE_A_SONG);
Toast.makeText(this, fileName + " set to play!", Toast.LENGTH_SHORT).show();
finish();
}
提前谢谢! Malvinka
答案 0 :(得分:0)
我找到了解决方案。也许对某人有用。 FLAG_ACTIVITY_SINGLE_TOP还不够。这是:
FileListActivity.java
intent = new Intent(this, MainActivity.class);
intent.putExtra("path", fileName);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
和MainActivity.java
protected void onNewIntent (Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}