Как я заставляю несколько значков запускать различные операции в одном приложении?

У меня есть приложение с двумя операциями, и я хотел бы смочь иметь два значка, появляются в средстве запуска, каждый запускающий соответствующее действие в рамках приложения.

А именно, я хочу, чтобы один значок запустил мое главное приложение и другой значок для запуска моего действия настроек. Действительно ли это возможно?

Вот то, что я попробовал до сих пор:

    <activity android:label="MyApp" android:name=".MyApp">
        <intent-filter>
            <action android:name=".MyApp"/>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>


    <activity android:label="Settings" android:name=".Settings">
        <intent-filter>
            <action android:name=".Settings"/>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

Это создает два значка средства запуска, но они оба запускают мое главное приложение вместо второго значка, запускающего мое приложение настроек. Я попытался просто иметь категорию средства запуска, но затем я не получаю значок, таким образом, похоже, что мне нужно основное действие также.

Действительно ли это - правильный подход, или я должен объявлять два приложения в декларации вместо этого?

46
задан afonseca 17 July 2010 в 05:40
поделиться

2 ответа

Что вам нужно сделать, так это запустить ваши настройки в другой задаче. Вы можете сделать это, указав его привязку к задаче. Это делается с помощью атрибута android: taskAffinity . По умолчанию все действия имеют одинаковую привязку к задаче, которая по умолчанию соответствует основному пакету, указанному в манифесте. В своем действии настроек вы можете указать android: taskAffinity = "your.own.package.SettingsTask" , чтобы действие настроек запускалось в отдельной задаче.

Дополнительная документация.

60
ответ дан 26 November 2019 в 20:34
поделиться

Вы определенно идете в правильном направлении. Это то, что у меня есть (усечено, потому что у меня есть все мои действия в списке, пока я разрабатываю для быстрого доступа):

<activity android:name=".DeckDrill"
          android:label="DeckDrill">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity android:name=".DeckList"
          android:label="DeckList">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Я думаю, что может происходить вмешательство со стороны ваших элементов действий, которые определяют имя вашего класса . Я почти уверен, что действия и категории должны ссылаться на константы. Я не знаю, как это может привести к тому, что вы видите, но вы можете попробовать удалить их. Помимо этого, у вас в значительной степени есть то, что есть у меня.

8
ответ дан 26 November 2019 в 20:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: