如何向清单声明的意图添加额外内容

时间:2017-04-10 07:15:18

标签: android android-intent

我已将Nougat快捷方式添加到我的Android应用程序中,但所有快捷方式都希望启动相同的活动,但使用不同的参数(然后,活动决定要添加哪个片段)

因此,在res\xml-v25\shortcuts.xml文件中,我描述了4个shortcut元素,它们都具有相同的意图

<intent
    android:action="android.intent.action.VIEW"
    android:targetClass="com.example.MyActivity"
    android:targetPackage="com.example"
/>

那么如何将带有额外内容的捆绑包传递给该活动? 我尝试了<meta-data><data>还有一件事,我忘了它是什么,但intentonCreate中的onNewIntent总是空着。

<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:enabled="true"
        android:icon="@drawable/feature_1"
        android:shortcutId="feature_one"
        android:shortcuDsaibledMessage="Disabled"
        android:shortcutShrotLabel="Feature 1"
        <intent
            android:action="android.intent.action.VIEW"
            android:targetClass="com.example.MyActivity"
            android:targetPackage="com.example"
         <!-- <extra -->
              <!-- android:name="action" -->
              <!-- android:value="feature_1"/> -->
        </intent>
    <shortcut>
    // then 3 more shortcuts like this with feature 2, 3 and 4

2 个答案:

答案 0 :(得分:1)

您应该为每个快捷方式添加一个额外,这样当您在活动中收到意图时,您可以按以下方式进行过滤:例如:

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <shortcut
    android:shortcutId="action1"
    android:enabled="true"
    android:icon="@drawable/compose_icon"
    android:shortcutShortLabel="@string/compose_shortcut_short_label1"
    android:shortcutLongLabel="@string/compose_shortcut_long_label1"
    android:shortcutDisabledMessage="@string/compose_disabled_message1">
    <intent 
    android:action="android.intent.action.VIEW"
    android:targetClass="com.example.MyActivity"
    android:targetPackage="com.example"/>
    <!-- If your shortcut is associated with multiple intents, include them
         here. The last intent in the list determines what the user sees when
         they launch this shortcut. -->
    <categories android:name="android.shortcut.conversation" />
    <extra
            android:name="accion"
            android:value="action_1_fragment1" />
  </shortcut>
  <!-- Specify more shortcuts here. -->
</shortcuts>

然后在你的活动中:

String action = getIntent().getStringExtra("accion");
if(action.equals(ACTION_1))
     //Do action 1
else
     //do action 2 

答案 1 :(得分:0)

不知道为什么,但@venimania的答案对我没有帮助,也许我做错了什么。我能够通过使用自己的自定义操作来解决我的问题:

<intent
        android:action="com.example.FEATURE_ONE"

然后在onCreate

String action = getIntent().getAction();