2

我想做的是以下几点:

  1. 用户从系统中所有可用快捷方式的列表中选择一个快捷方式;
  2. 存储相关信息;
  3. 用户执行操作并执行选定的快捷方式,就像它是主屏幕上的图标一样。

到目前为止,我能够使用 getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_CREATE_SHORTCUT), 0);. 选择快捷方式后,我开始ACTION_CREATE_SHORTCUT打算自定义快捷方式参数 - 它呈现正确的 UI 并且似乎可以工作。我使用此代码来启动意图:

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总是在startActivityForResultrequestCode=0、resultCode=0 且没有数据的情况下立即触发。它不会在ACTION_CREATE_SHORTCUT活动实际结束时触发。我真的不明白。我认为在活动结束后,它应该返回我发送给它的 requestCode 和数据意图,其中包含Intent.EXTRA_SHORTCUT_INTENT我可以用某种方式实际启动快捷方式的数据意图。

问题的第二部分是我如何实际存储用户选择的快捷方式的必要信息,最好是在 中SharedPreferences,以便我以后可以使用特定参数执行此快捷方式。我找不到任何这样的例子。

任何帮助将非常感激!谢谢!

4

2 回答 2

3

2年后,这是我问题的答案:

startActivityForResult/系统的正常运行onActivityResult显然取决于调用和被调用的活动都是同一任务的一部分。因此,任何会导致两个活动在不同任务中启动的操作都会破坏此功能。launchMode此类操作包括为 中的任何活动设置任何独占AndroidManifest.xml或使用标志,例如Intent.FLAG_ACTIVITY_NEW_TASK在启动两个活动中的任何一个时。

为解决方案投票支持 user2427931 的答案Intent.parseUri()

于 2015-05-14T10:17:25.747 回答
2

当我的调用活动有launchMode =“singleInstance”时,我有同样的行为。你也定义了吗?

关于保存意图。您可以将意图转换为 URI 并将其保存为 SharedPreferences 中的字符串。然后,您可以在检索到 Intent.pareseUri() 后使用它。

//Erty

于 2013-05-28T09:41:29.260 回答