我有一个媒体应用程序,当意图被发送到具有以下意图附加功能的玩家活动时开始播放;数据“音乐之路”并输入“mime / audio format”。
我在播放器活动执行中获取意图数据以开始播放,并从意图中移除传递的额外内容,以避免在翻转屏幕或将活动带回前台后再次发出相同的请求。
这是我处理意图的方式:
final String data = getIntent().getDataString();
final String type = getIntent().getType();
// start playback
requestPlay( data, type );
// remove intents because they are needed only once per call!
this.getIntent().setDataAndType(Uri.parse(""), "");
this.getIntent().removeExtra("data");
this.getIntent().removeExtra("type");
我遇到的问题是随机而且很少,我会打开应用程序,当它恢复播放器活动时,意图将包含以前的额外数据并开始播放...这对我很烦人我的用户......
任何人都有什么想法清除意图数据的最佳方法是什么?有些原因,ActivityManager可能会保存这些数据......?
谢谢!
-Jona
答案 0 :(得分:4)
我的解决方案:
Bundle mExtrass = null;
getIntent().replaceExtras(mExtrass);
这清楚了额外的数据。
答案 1 :(得分:0)
不清楚这一点,但您是否尝试过Intent标志FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET或FLAG_ACTIVITY_NEW_TASK?
答案 2 :(得分:0)
检索数据并输入字符串时,请尝试将其作为额外内容传递,而不是使用getDataString()
和getType()
:
final String data = getIntent().getExtras().getString("music_path");
final String type = getIntent().getExtras().getString("data_type");
// start playback
requestPlay( data, type );
// remove intents because they are needed only once per call!
this.getIntent().setDataAndType(data, type);
this.getIntent().removeExtra("music_path");
this.getIntent().removeExtra("data_type");
之前,您需要将类型作为附加内容传递:
intent.putExtra("music_path", <path to music>);
intent.putExtra("data_type", <mime/audio format);
答案 3 :(得分:0)
我遇到过同样的问题。在我的例子中,问题是我有时在应用程序启动时有两个意图:一个在onCreate中,另一个在onNewIntent中。 onCreate的意图附加了一些非常旧的数据(应该根据文档清除),而onNewIntent没有额外的数据(正确的情况)。
我的解决方案是记录最后一个传入的意图(假设最后一个意图是正确的意图),然后在onResume中处理意图,因为在onCreate和onNewIntent之后调用该方法。像这样:
private Intent lastIntent;
public void onCreate()
{
lastIntent = getIntent();
}
public void onNewIntent(Intent intent)
{
lastIntent = intent;
}
public void onResume()
{
if (lastIntent != null)
{
// handle lastIntent and then set it to null
lastIntent = null;
}
}