我怀疑只有一些愚蠢的错误,但我被困住了。问题很简单:我的字符串path
不会发送到MainActivity
。
在FileListActivity.class中创建意图
intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("path", fileName);
Toast.makeText(this, fileName + " set to play!", Toast.LENGTH_SHORT).show();
startActivity(intent);
在MainActivity.class中接收意图
protected void onResume(){
super.onResume();
Toast.makeText(this, "path set" + getIntent().getStringExtra("path"), Toast.LENGTH_SHORT).show();
if(getIntent().hasExtra("path")) try {
mediaPlayer.setDataSource(this, Uri.parse(getIntent().getStringExtra("path")));
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
FileListActivity
中的Toast显示正确的文件名。在MainActivity
中,它为空。
答案 0 :(得分:3)
尝试覆盖protected void onNewIntent (Intent intent)
中的MainActivity
,如下所示......
@Override
protected void onNewIntent (Intent intent) {
setIntent(intent);
}
使用MainActivity
重新启动Intent.FLAG_ACTIVITY_SINGLE_TOP
并使用getIntent()
MainActivity
方法调用onResume()
无法获得新的Intent
只需获取原来的Intent
,而path
额外的onNewIntent(...)
。
通过覆盖setIntent(...)
并使用它来呼叫Intent
,新getIntent()
会覆盖原始onResume()
,而{{1}}中对{{1}}的调用应该会获得正确的数据。
答案 1 :(得分:0)
您可以在MainActivity中尝试这种方式:
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Bundle pathBundle=getIntent().getExtras();
if(pathBundle!=null)
{
String myPath=pathBundle.getString("path");
}
}
和onResume方法
protected void onResume()
{
super.onResume();
try
{
mediaPlayer.setDataSource(this, Uri.parse(myPath)); // Dont forget to declare myPath String globally.
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
希望这可以解决你的问题..
答案 2 :(得分:0)
如果传递给putExtra()的值不是String对象,则getStringExtra()返回null。
根据对问题的评论来判断,这不是这个具体案例的答案。但是,值得一提的是因为这是问题的一个非常常见的原因" putExtra(),getStringExtra() - 为什么它不起作用?"