r3m*_*3mo 13 android extras android-intent android-activity
这里有点困惑的问题:
我有一个主屏幕小部件,当点击它时,启动我的主应用程序Activity,并在意图中添加一些额外内容:
Intent start = new Intent(context, Main.class);
start.putExtra("action", "showXYZ");
start.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(start);
Run Code Online (Sandbox Code Playgroud)
这一切都很好,它开始我的活动,我的活动按预期收到额外的.它处理这些额外内容并开始另一项活动.
一旦用户点击主屏幕小部件并以这种方式启动主要活动,通过"最近的应用程序"方法进入应用程序(按住"主页"键)将启动主要活动及其他内容 - 导致处理发生我不想要(并导致第二个活动打开,而不是仅显示主活动).
这有什么解决方法吗?从"最近的应用程序"方法启动应用程序时,我想简单地启动Main活动而不使用最后一组附加功能.
非常感谢您的帮助!r3mo
注意:我在Android 1.5上
编辑:
在这里找到了一个解决方法: Android保持缓存我的意图额外,如何声明一个保留新鲜额外的待处理意图?
我将为窗口小部件引发的意图添加时间戳,并检查Main.java中的时间戳是否是最近的.如果是,我将继续处理.如果没有,我将只显示Main.java活动.
很想知道是否有任何官方解决方案.
Mr *_*uni 41
正如Martijn所说,您可以使用带有标志FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY集的Intent来检查您的应用程序是否已打开,如下所示:
int flags = getActivity().getIntent().getFlags();
if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
// The activity was launched from history
}
Run Code Online (Sandbox Code Playgroud)
小智 11
我认为你可以通过检查Intent标志来区分"正常"启动和"最近应用程序"启动; 有一面叫做旗帜
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
根据文件:
This flag is not normally set by application code, but set for you by the system if this activity is being launched from history (longpress home key).
因此,当设置此标志时,您可以选择忽略其他内容.
小智 0
使用后,您应该从您的意图中清除额外的内容。
Bundle extras = getIntent().getExtras();
if (extras == null) {
return;
}
String value1 = extras.getString("Value1");
String value2 = extras.getString("Value2");
extras.clear();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6546 次 |
| 最近记录: |