私の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>
AndroidManifest.xmlに複数のアクティビティエントリがある場合、Androidどのアクティビティを最初に開始するかをどのように知るのでしょうか?
「最初」はありません。この場合、マニフェストが示されているように、ランチャーに2つのアイコンがあります。ユーザーがタップしたものが起動されます。
インテントフィルターを理解できませんでした。誰でも説明してください。
件名に関するドキュメント がかなりあります。それを読んでから、より具体的な質問をしてください。
また、「アプリケーションが予期せず停止しました。もう一度試してください」というメッセージが表示されたら、adb logcat
、DDMS、またはEclipseのDDMSパースペクティブを使用して、エラーに関連するJavaスタックトレースを調べます。
インテントフィルターは、アプリケーションのマニフェストファイル内の式であり、コンポーネントが受け取りたいインテントのタイプを指定します。
暗黙的なインテントを作成すると、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);
アプリを開いたときに最初の画面にしたい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>
最初に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メソッドを使用してこのアクティビティを開始できます。
暗黙的なインテントを作成すると、Androidシステムは、インテントの内容をデバイス上の他のアプリのマニフェストファイルで宣言されたインテントフィルターと比較することにより、開始する適切なコンポーネントを見つけます。インテントがインテントフィルターと一致した場合、システムはそのコンポーネントを起動してIntentオブジェクトを配信します。
インテントフィルターは、アプリケーションのマニフェストファイル内の式であり、コンポーネントが受け取りたいインテントのタイプを指定します。たとえば、アクティビティのインテントフィルターを宣言すると、他のアプリが特定の種類のインテントでアクティビティを直接開始できるようになります。同様に、アクティビティのインテントフィルタを宣言しない場合、明示的なインテントでのみ開始できます。
一致: インテントとインテントフィルター
キーMAIN
およびLAUNCHER
を使用して最初のインテントフィルターを保持し、ANY_NAME
およびDEFAULT
として別のインテントフィルターを追加します。
LAUNCHER
がアクティビティAになり、DEFAULT
がアクティビティBになります。
2つのLauncher AFAIKは存在できません。 Logcatは、背後でアプリケーション/マシンのステータスをデバッグおよびチェックするための便利なツールです。あるアクティビティから別のアクティビティに切り替える間、自動的に行われます。
インテントフィルターは、コンポーネントが受け取るインテントのタイプを指定するアプリのマニフェストに存在する式です。コンポーネントにインテントフィルターがない場合、明示的なインテントを受け取ることができます。フィルター付きコンポーネントが暗黙的および明示的な意図の両方を受け取る場合
可能であれば、この1つのインスタントソリューションを試してください。
Intent intent =new Intent(getApplicationBaseContext,second_Act.class);
StartActivity(intent);