質問をする前に、私は見たandroid intent filter?
し、Android: Activity not registered in the manifest
検索もしましthis
たが、答えが見つかりませんでした。
私のアプリでは、Activty1
フォームIntentFilterActivity
(両方ともアクティビティ)をで開始するimplicit Intent
必要があります。コードは次のとおりです。
マニフェスト
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.your.namespace" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="2" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".IntentFilterActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="Activity1" android:name="com.your.namespace.Activity1" > <intent-filter > <action android:name="com.your.namespace.MY_MAIN"/> <category android:name="com.your.namespace.MY_LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
IntentFilterActivity
package com.your.namespace; public class IntentFilterActivity extends Activity { protected String action = "com.your.namespace.MY_MAIN"; protected String category = "com.your.namespace.MY_LAUNCHER"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(IntentFilterActivity.this,Activity1.class); IntentFilterActivity.this.startActivity(i); } }); Button b2 = (Button) findViewById(R.id.button2); b2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(); i.setAction(action); i.addCategory(category); IntentFilterActivity.this.startActivity(i); } }); } }
アクティビティ1
package com.your.namespace; public class Activity1 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main1); } }
最初に1つのボタン(たとえばb2
)がR.layout.main
あり、そのonClickイベントで暗黙のインテントを使用してActivity1を開始しようとしましたが、クリックすると次のエラーが発生します:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.your.namespace.MY_MAIN cat=[com.your.namespace.MY_LAUNCHER] }
そこで、別のBuuton(say b1
)をR.layout.main
onClickイベントに追加し、明示的なインテントでActivity1を開始しようとしましたが、Activity1は正常に開始されました。問題は、Activity1をマニフェストに登録することです。
パッケージ名を変更し、プロジェクトをクリーンアップ/ビルドし、新しいプロジェクトを作成してそこから開始し、別のコンピューターでEclipseにプロジェクトをインポートし、Eclipseを再起動して...エラーが発生します。私のプロジェクトにはパッケージが1つしかありません(com.your.namespace
) 。
私は何を間違えますか?この問題を解決するのを手伝ってください。
編集:
Activty1のインテントフィルターをこれに変更すると:
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
アプリを実行すると、アプリケーションのアイコンが2回表示されLauncher
ます!これは奇妙なことです。1つのインテントフィルターは無視され、別のフィルターは無視されているようです。