web-dev-qa-db-ja.com

Androidアプリ開発:2つのアイコンが作成され、1つだけ必要です

Androidアプリにメインアクティビティとサブアクティビティが1つずつあるアプリを書いています。アプリをスマートフォンにインストールしてテストすると、1つではなく2つのアイコンが表示されます。最初のアイコンはメインアクティビティとサブアクティビティはサブアクティビティ用です。サブアクティビティ用のアイコンは必要ありません。

メインアクティビティのアイコンのみがインストールされるように、アプリコードでこれをオフにする方法を誰かが知っていますか?あなたが提供できるどんな情報でも大歓迎です!

ありがとう、MobiKnow

43
MobiKnow

アプリケーションマニフェストは、メインランチャーと一致するサブアクティビティの下にインテントフィルターをリストしますか?

        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>

サブアクティビティがこれらのインテントをフィルタリングしていないことを確認してください。

編集:非常に明確にするために、上記の行がサブアクティビティの下にリストされていないことを確認してください。そのインテントフィルターは、Androidシステムに、アプリケーションへのエントリポイントとしてリストされることを意図していることを知らせます。

67
WorkerThread

同じ問題がありますが、マニフェストの以下のコードの前にこの方法で修正しました

<application
        Android:debuggable="true"
        Android:allowBackup="true">
        <activity        Android:name=".SplashActivity">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            Android:name="com.noupdate.apptest_noupdate.MainActivity"
            Android:icon="@drawable/ic_launcher"
            Android:label="@string/app_name">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

インテント内のSplashActivityにこのコードがあることに注意してください

<intent-filter>
 <action Android:name="Android.intent.action.MAIN" />
  <category Android:name="Android.intent.category.LAUNCHER" />
 </intent-filter>

カテゴリーを削除しただけです

 <category Android:name="Android.intent.category.LAUNCHER" />

したがって、スプラッシュでインテントフィルターカテゴリを削除した後、2つのアプリアイコンはインストールされませんでしたが、メインのコードは1つだけで、インテントフィルターカテゴリが削除されたことを示すこのような通知になります

<application
        Android:debuggable="true"
        Android:allowBackup="true">
        <activity     Android:name=".SplashActivity">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

            </intent-filter>
        </activity>
        <activity
            Android:name="com.noupdate.apptest_noupdate.MainActivity"
            Android:icon="@drawable/ic_launcher"
            Android:theme="@Android:style/Theme.NoTitleBar"
            Android:label="@string/app_name">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

それは本当に役立ちます

23

2つのアクティビティに特定のフィルターを追加している必要があるため、2つのアプリアイコンが作成されます。マニフェストを参照してください。

<category Android:name="Android.intent.category.MAIN" />

上記のステートメントを他のステートメントから削除します。その後、問題ありません。

16

他の答えのように、

<intent-filter>
    <action Android:name="Android.intent.action.MAIN" />
    <category Android:name="Android.intent.category.LAUNCHER"/>   

犯人だった。ただし、私のマニフェストでは、そのインテントフィルターで1つのアクティビティしかありませんでした。結局のところ、私は自分が構築したライブラリを使用しており、そのインテントフィルターを使用するマニフェストで宣言されているアクティビティがあります。つまり、簡単に言うと、アプリのマニフェストと依存関係がある場合は、インテントフィルターを使用したアクティビティが1つだけであることを確認してください。

6
Tyler H

あなたが持っている

    <intent-filter . . . >
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>

に加えて

Android:icon="@drawable/icon.png"

両方のアクティビティに設定します。

つまり、これはランチャーアイコンで、ホーム画面に移動します。ホーム画面で必要なアクティビティのみを設定してください。

3
Falmarri

AndroidManifest.xmlには、LAUNCHER itnent-filterを持つ両方のアクティビティーがあると思います。 2番目のアクティビティから削除すると、設定されます。

3
Blumer

まったく同じ質問の答えを探していました。 (メインとランチャーのインテントフィルターの削除に関する推奨事項に加えて)必要なのはプロジェクトを再構築することだけです-クリーンアップし、次回の起動時にデバイスに単一のアイコンが表示されました(変更後にデバイスでアプリケーションを実行するだけです)助けません)。

2
NeviQ-OR

pebble SDKを使用してこの問題が発生した場合。 PebbleKit Androidmanifest.xmlがLAUNCHERアクティビティも保持していることに気付きました。これが原因でした。この部分を削除するだけです。 Pebbleの機能には影響しません。

1
pseudozach
<intent-filter Android:icon=”drawable resource” Android:priority=”Integer” /intent-filter>

親コンポーネントに優先度が設定されています。この設定は、Androidアプリ開発の親アイコンを設定するのに役立ちます。

0
Pon Pandian

簡単な答え..削除:

<category Android:name="Android.intent.category.LAUNCHER" />

AndroidManifest.xmlから

インテントフィルターはそのままにしておきます。

0
Fox