我想做的是以下内容:
到目前为止,我可以使用填充和显示包含所有快捷方式的列表
getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_CREATE_SHORTCUT), 0);
。选择快捷方式后,我启动ACTION_CREATE_SHORTCUT
意图来自定义快捷方式参数 - 它显示正确的用户界面并且似乎有效。我使用此代码来启动意图:
ActivityInfo activity = resolveInfo.activityInfo;
ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
Intent i = new Intent(Intent.ACTION_CREATE_SHORTCUT);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
startActivityForResult(i, 1);
这是我的onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode==1 && resultCode == RESULT_OK) {
try {
startActivity((Intent) data.getExtras().get(Intent.EXTRA_SHORTCUT_INTENT));
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "Success!!", Toast.LENGTH_LONG).show();
finish();
}else{
Toast.makeText(getApplicationContext(), "Fail: "+resultCode+" "+resultCode, Toast.LENGTH_LONG).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
现在,问题是onActivityResult
总是在startActivityForResult
之后立即被触发,其中requestCode = 0,resultCode = 0并且没有数据。 ACTION_CREATE_SHORTCUT
活动实际结束时不会触发。我真的不明白。我认为在活动结束后它应该返回我发送的requestCode和包含Intent.EXTRA_SHORTCUT_INTENT
的数据意图,然后我可以使用 以某种方式 来实际启动捷径。
问题的第二部分是如何为用户选择的快捷方式实际存储必要的信息,最好是SharedPreferences
,这样我以后可以使用特定参数执行此快捷方式。我找不到任何这样的例子。
任何帮助将不胜感激!谢谢!
答案 0 :(得分:2)
当我的调用活动有launchMode =“singleInstance”时,我有同样的行为。你有定义吗?
关于保存意图。您可以将intent转换为URI并将其保存为SharedPreferences中的字符串。然后,一旦检索到它,就可以使用Intent.pareseUri()。
// Erty
答案 1 :(得分:2)
超过2年后,这是我的问题的答案:
startActivityForResult
/ onActivityResult
系统的正常运行显然取决于调用和被调用的活动是同一个任务的一部分。因此, 任何 操作会导致在单独的任务中启动这两个活动会破坏此功能。此类操作包括为launchMode
中的任何活动设置任何独占AndroidManifest.xml
,或在启动任意两个活动时使用Intent.FLAG_ACTIVITY_NEW_TASK
等标记。
为Intent.parseUri()
解决方案提供了用户2427231的答案。