web-dev-qa-db-ja.com

Androidのインテントフィルターとは何ですか?

私のAndroidアプリでは、最初のアクティビティ 'A'からアクティビティ 'B'を開始したかった。これら両方のクラスを作成した。しかし、次のコードを使用してBを開始すると、ランタイムエラー:application has stopped unexpectedly, try again。ここに私のコードがあります:

Intent myIntent = new Intent(this, AddNewActivity.class);
startActivity(myIntent); 

アクティビティBのAndroidManifest.xml/manifest/application/activity/intent-filersに新しいエントリを追加すると、アプリケーションは機能しました。

2つの質問があります。

  • AndroidManifest.xmlに複数のアクティビティエントリがある場合、Androidはどのアクティビティを最初に開始するかをどのように知るのですか?
  • インテントフィルターを理解できませんでした。誰でも説明してください。

ここに私のAndroidManifest.xmlの一部があります

<application Android:icon="@drawable/icon" Android:label="@string/app_name">
    <activity Android:name=".ListAllActivity"
              Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity Android:name=".AddNewActivity" 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>
52
ankitjaininfo

AndroidManifest.xmlに複数のアクティビティエントリがある場合、Androidどのアクティビティを最初に開始するかをどのように知るのでしょうか?

「最初」はありません。この場合、マニフェストが示されているように、ランチャーに2つのアイコンがあります。ユーザーがタップしたものが起動されます。

インテントフィルターを理解できませんでした。誰でも説明してください。

件名に関するドキュメント がかなりあります。それを読んでから、より具体的な質問をしてください。

また、「アプリケーションが予期せず停止しました。もう一度試してください」というメッセージが表示されたら、adb logcat、DDMS、またはEclipseのDDMSパースペクティブを使用して、エラーに関連するJavaスタックトレースを調べます。

29
CommonsWare

インテントフィルターは、アプリケーションのマニフェストファイル内の式であり、コンポーネントが受け取りたいインテントのタイプを指定します。

暗黙的なインテントを作成すると、Androidシステムは、インテントの内容をデバイス上の他のアプリのマニフェストファイルで宣言されたインテントフィルターと比較することにより、開始する適切なコンポーネントを見つけます。 intentがintentフィルターと一致した場合、システムはそのコンポーネントを起動し、Intentオブジェクトを配信します。

AndroidManifest.xml

<activity Android:name=".HelloWorld"
    Android:label="@string/app_name">
    <intent-filter>
        <action Android:name="Android.intent.action.VIEW"/>
        <category Android:name="Android.intent.category.DEFAULT"/>
        <category Android:name="Android.intent.category.BROWSABLE"/>
        <data Android:scheme="http" Android:Host="androidium.org"/>
    </intent-filter>
</activity>

HelloWorldを起動

Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse("http://androidium.org"));
startActivity(intent);
66
santoshpatmca

アプリを開いたときに最初の画面にしたいActivityは、インテントカテゴリでLAUNCHERと記述し、残りのアクティビティはインテントカテゴリでDefaultと記述します。

たとえば:-2つのアクティビティAとBがあります
アクティビティAはランチャーであるため、インテントカテゴリでランチャーとして作成し、BはアクティビティAの子なので、デフォルトとして作成します。

<application Android:icon="@drawable/icon" Android:label="@string/app_name">
    <activity Android:name=".ListAllActivity"
              Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity Android:name=".AddNewActivity" Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>
2
Mahadevappa T

最初にxmlを変更し、2番目のアクティビティをデフォルトとしてマークします

<activity Android:name=".AddNewActivity" Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

これで、StartActivityメソッドを使用してこのアクティビティを開始できます。

2
Excel Logix

暗黙的なインテントを作成すると、Androidシステムは、インテントの内容をデバイス上の他のアプリのマニフェストファイルで宣言されたインテントフィルターと比較することにより、開始する適切なコンポーネントを見つけます。インテントがインテントフィルターと一致した場合、システムはそのコンポーネントを起動してIntentオブジェクトを配信します。

インテントフィルターは、アプリケーションのマニフェストファイル内の式であり、コンポーネントが受け取りたいインテントのタイプを指定します。たとえば、アクティビティのインテントフィルターを宣言すると、他のアプリが特定の種類のインテントでアクティビティを直接開始できるようになります。同様に、アクティビティのインテントフィルタを宣言しない場合、明示的なインテントでのみ開始できます。

一致: インテントとインテントフィルター

2

キーMAINおよびLAUNCHERを使用して最初のインテントフィルターを保持し、ANY_NAMEおよびDEFAULTとして別のインテントフィルターを追加します。

LAUNCHERがアクティビティAになり、DEFAULTがアクティビティBになります。

1
Prashant

2つのLauncher AFAIKは存在できません。 Logcatは、背後でアプリケーション/マシンのステータスをデバッグおよびチェックするための便利なツールです。あるアクティビティから別のアクティビティに切り替える間、自動的に行われます。

1
Saikat Biswas

インテントフィルターは、コンポーネントが受け取るインテントのタイプを指定するアプリのマニフェストに存在する式です。コンポーネントにインテントフィルターがない場合、明示的なインテントを受け取ることができます。フィルター付きコンポーネントが暗黙的および明示的な意図の両方を受け取る場合

1
Bajirang namade

可能であれば、この1つのインスタントソリューションを試してください。

Intent intent =new Intent(getApplicationBaseContext,second_Act.class);
StartActivity(intent);
0
Shiva-mamaa