如何将数据添加到应用程序快捷方式Intent

时间:2017-03-02 11:34:13

标签: android android-manifest shortcuts

我想要做的是将某个键值传递给intent,指示应用程序是通过快捷方式打开的,因此它执行某些任务而不是标准启动。 在我的情况下,应用程序需要在继续之前从服务器下载数据。我希望在安装后可以使用快捷方式,因此我无法像启动后到目前为止那样放置动态快捷方式。 我还尝试通过打开一个特殊的活动来实现这一点,我将密钥放在意图中,但是我需要单独为每个快捷方式执行此操作,因为我不知道如何确定用户点击的快捷方式。 如何将原始数据放入shortcut.xml中的intent?

EDIT_1:这会是类别吗?也许有一种方法可以做到。

EDIT_2当前解决方案:我通过将类别放入xml文件中的快捷方式intent来解决它。我怎么还在寻找一个用于将原始数据放入xml intent的命名空间。

2 个答案:

答案 0 :(得分:2)

U应该可以检查android文档并查看如何添加动态ShortCut检查这个,你可以通过这样的方式传递一个intent,使用Bundle也许Dynamic ShortCut App

  ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);

    ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "id1")
        .setShortLabel("Web site")
        .setLongLabel("Open the web site")
        .setIcon(Icon.createWithResource(context, R.drawable.icon_website))
        //check out this part
        .setIntent(new Intent(Intent.ACTION_VIEW,
                       Uri.parse("https://www.mysite.example.com/")))
        .build();

    shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));

对于静态Shorcut ,如果你想要检测某些内容,那么shorcut你按下的内容会在ur xml shorcut>下使用它。意图:

<intent
 android:action="com.example.whatever.WTF"
 ..../>

然后在你的活动中声明一个常数。

private static final String ACTION_ADD_WTF ="com.example.whatever.WTF";

然后onCreate()把这个:

if (ACTION_ADD_WTF.equals(getIntent().getAction())) {
            // Invoked via the manifest shortcut.
            //TODO:put your logic here
}

Android中的P.D WTF 多么糟糕的失败,不要以为不好! :d

答案 1 :(得分:1)

如果要设置意图的数据uri,可以通过在静态xml(https://developer.android.com/guide/topics/ui/shortcuts.html#static)中设置它来实现:

...
<intent
    android:action="android.intent.action.VIEW"
    android:targetPackage="com.yourname.yourapp"
    android:targetClass="com.yourname.yourapp.activities.ShortcutActivity"
    android:data="content://com.yourname.yourapp/compose/new?from=shortcut" />
...

在您的活动中,您将获得数据uri:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final Uri data = this.getIntent().getData();
}