在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构建工具更新为:
时,问题才浮出水面