web-dev-qa-db-ja.com

1つのアプリケーションでさまざまなアクティビティを起動するために複数のアイコンを取得するにはどうすればよいですか?

2つのアクティビティを持つアプリケーションがあり、ランチャーに2つのアイコンを表示できるようにしたいと思います。それぞれがアプリ内のそれぞれのアクティビティを起動します。

具体的には、1つのアイコンでメインアプリを起動し、別のアイコンで設定アクティビティを起動する必要があります。これは可能ですか?

これが私がこれまでに試したことです:

    <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>

これにより2つのランチャーアイコンが作成されますが、2つ目のアイコンが設定アプリを実行する代わりに、どちらもメインアプリを実行します。ランチャーカテゴリだけを試しましたが、アイコンが表示されないので、メインアクションも必要なようです。

これは正しいアプローチですか、それとも代わりにマニフェストで2つのアプリケーションを宣言する必要がありますか?

47
afonseca

あなたがする必要があるのは、別のタスクで設定アクティビティを起動させることです。これを行うには、タスクのアフィニティを指定します。これは、属性Android:taskAffinityで行われます。デフォルトでは、すべてのアクティビティは、マニフェストで指定されたメインパッケージをデフォルトとする同じタスクアフィニティを共有します。設定アクティビティでAndroid:taskAffinity="your.own.package.SettingsTask"を指定すると、設定アクティビティを独自のタスクで起動できます。

追加のドキュメント。

60
Rich Schuler

あなたは間違いなく正しい方向に進んでいます。これは私が持っているものです(高速アクセスのために開発している間、私はすべてのアクティビティをリストに持っているため、切り捨てられています):

<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
treed