5

我有一个带有上下文菜单的非启动器活动。该菜单包含一个选项,可将 Activity 作为快捷方式添加到 Android 主屏幕。

我正在使用下面的代码来创建快捷方式。

private void ShortcutIcon(){

    Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Test");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher));

    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(addIntent);
}

正确设置了必要的权限和意图过滤器。当我运行此代码时,快捷方式已成功创建。在快捷方式单击时,活动按预期打开。

但是,我的活动显示了一些动态数据。为此,我需要将一个小字符串变量传递给活动。

我之前曾尝试使用此代码setAction(就像您将额外数据传递给启动活动的正常意图一样)

addIntent.putExtra("key_primarykey", value_i_want_to_pass);

但是,当用户单击活动内部的快捷方式时,value_i_want_to_pass会显示为 Null。

某些应用程序(例如Whatsapp)允许执行完全相同的操作。您可以保存聊天的快捷方式。还有一些dialer apps允许将联系人添加为快捷方式,以便当您点击快捷方式时,会自动发起语音通话。

我想知道如何将一些数据从我的快捷方式传递到我的活动。

4

1 回答 1

0

您正在发送addIntent将被 Launcher 的广播接收器捕获的数据。

只需更改以下行

addIntent.putExtra("key_primarykey", value_i_want_to_pass); 

shortcutIntent.putExtra("key_primarykey", value_i_want_to_pass);

并将其与您的shorcutIntent代码一起编写,然后再设置shortcutIntentaddIntent.
这样Action Intent您为快捷方式设置的值就会返回正确的值。所以修改后的代码如下。

private void ShortcutIcon(){

    Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    shortcutIntent.putExtra("key_primarykey", value_i_want_to_pass);

    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Test");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher));

    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    getApplicationContext().sendBroadcast(addIntent);
}
于 2017-06-07T12:51:19.900 回答