У меня есть приложение с двумя операциями, и я хотел бы смочь иметь два значка, появляются в средстве запуска, каждый запускающий соответствующее действие в рамках приложения.
А именно, я хочу, чтобы один значок запустил мое главное приложение и другой значок для запуска моего действия настроек. Действительно ли это возможно?
Вот то, что я попробовал до сих пор:
<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>
Это создает два значка средства запуска, но они оба запускают мое главное приложение вместо второго значка, запускающего мое приложение настроек. Я попытался просто иметь категорию средства запуска, но затем я не получаю значок, таким образом, похоже, что мне нужно основное действие также.
Действительно ли это - правильный подход, или я должен объявлять два приложения в декларации вместо этого?
Что вам нужно сделать, так это запустить ваши настройки в другой задаче. Вы можете сделать это, указав его привязку к задаче. Это делается с помощью атрибута android: taskAffinity
. По умолчанию все действия имеют одинаковую привязку к задаче, которая по умолчанию соответствует основному пакету, указанному в манифесте. В своем действии настроек вы можете указать android: taskAffinity = "your.own.package.SettingsTask"
, чтобы действие настроек запускалось в отдельной задаче.
Вы определенно идете в правильном направлении. Это то, что у меня есть (усечено, потому что у меня есть все мои действия в списке, пока я разрабатываю для быстрого доступа):
<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>
Я думаю, что может происходить вмешательство со стороны ваших элементов действий, которые определяют имя вашего класса . Я почти уверен, что действия и категории должны ссылаться на константы. Я не знаю, как это может привести к тому, что вы видите, но вы можете попробовать удалить их. Помимо этого, у вас в значительной степени есть то, что есть у меня.