应用程序运行时,活动不会从快捷方式触发Intent

时间:2014-07-15 22:45:14

标签: android android-intent android-activity android-manifest

在Android的某些版本中,我的应用中的一个活动并不总是会收到触发Intent的快捷方式。

该应用会创建一个快捷方式,其意图是针对应用中的特定活动(SomeActivity)

Intent shortcutIntent = new Intent(this, SomeActivity.class);
Intent i = new Intent();

i.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); 
i.putExtra(Intent.EXTRA_SHORTCUT_NAME, 'shortcut name');
i.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(this, R.drawable.icon));
i.setAction("com.android.launcher.action.INSTALL_SHORTCUT");                                                   sendBroadcast(i);

快捷方式按预期安装。

对于Nexus 5(4.4.4)和三星S5(4.4.2)以及旧的三星(2.3.6),一切都按预期工作,即单击快捷方式时会调用SomeActivity的onCreate函数。

但对于其他设备,例如索尼Xperia(4.3)如果您之前退出应用程序,它可以正常工作,但如果应用程序在后台(之前通过按Home键离开应用程序),那么当按下快捷方式时,SomeActivity的onCreate都没有或onNewIntent被调用。

我设法通过在intent上设置一个标志来解决问题:

scIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

或将清单中的launchMode设置为singleTask。

在这两种情况下,无论应用程序的状态如何(不运行或在后台运行),都会始终调用onAreate of SomeActivity。

但是标准或singleTop的launchModes不起作用(如果应用程序在后台),应用程序只是到了前台,但没有调用SomeActivity的onCreate或onNewIntent。我不明白他们为什么不是。

对于记录,我最初没有定义launchMode(因此默认为标准),一切都表现正常。我相信当我将SDK构建工具更新为:

时,问题才浮出水面
  • Android SDK工具23.0.2
  • Android SDK平台工具20
  • Android Build Tools 20

0 个答案:

没有答案