私はこのエラーを受け取ります:
06-06 10:45:19.685: E/AndroidRuntime(554): Android.content.ActivityNotFoundException: Unable to find explicit activity class {com.Android.myApp/com.Android.myApp.Facebook.Example}; have you declared this activity in your AndroidManifest.xml?
しかし、マニフェストファイルで宣言しました。そのような例外の他の理由は何でしょうか?
私のmanifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.Android.myApp"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk Android:minSdkVersion="4" />
<uses-feature Android:name="Android.hardware.camera" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.CAMERA" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@Android:style/Theme.Light" >
<activity
Android:name=".SignUpActivity"
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=".SignInActivity"
Android:label="@string/app_name" />
<activity
Android:name=".HomeActivity"
Android:label="@string/app_name" />
<activity
Android:name=".selectCityActivity"
Android:label="@string/app_name" />
<activity
Android:name=".FeedListViewActivity"
Android:label="@string/app_name" />
<activity
Android:name=".SearchActivity"
Android:label="@string/app_name" />
<activity
Android:name=".IWantActivity"
Android:label="@string/app_name" />
<activity
Android:name=".DateActivity"
Android:label="@string/app_name" />
<activity
Android:name=".ShareActivity"
Android:label="@string/app_name" />
<activity
Android:name=".ShareProductActivity"
Android:label="@string/app_name" />
<activity
Android:name=".SharePriceActivity"
Android:label="@string/app_name" />
<activity
Android:name=".ShareStoreActivity"
Android:label="@string/app_name" />
<activity
Android:name=".ProfileActivity"
Android:label="@string/app_name" />
<activity
Android:name=".ShowMapActivity"
Android:label="@string/app_name" />
<activity
Android:name=".ParticularEntryActivity"
Android:label="@string/app_name" />
<activity
Android:name=".MyLocationActivity"
Android:label="@string/app_name" />
<activity
Android:name=".MapMarkerActivity"
Android:label="@string/app_name" />
<activity
Android:name=".BarcodeActivity"
Android:label="@string/app_name" />
<activity
Android:name=".BarcodeResult"
Android:label="@string/app_name" />
<activity
Android:name=".FeedbackActivity"
Android:label="@string/app_name" />
<activity
Android:name=".SplashActivity"
Android:label="@string/app_name" />
<activity
Android:name=".Example"
Android:label="@string/app_name" />
<uses-library Android:name="com.google.Android.maps" />
</application>
</manifest>
マニフェストでパッケージ名をcom.Android.myApp
およびアクティビティ名.Example
。Soとして宣言しました。Androidはcom.Android.myApp.Example
から検索します。ただし、アクティビティは " com.Android.myApp/com.Android.myApp.Facebook.Example
"。そのため、アクティビティ名を.Facebook.Example
として指定するか、以下に示すフルパスをマニフェストで指定します
<activity
Android:name="com.Android.myApp.Facebook.Example">
</activity>
あなたも使用できます
<activity
Android:name=".Facebook.Example"
Android:label="@string/app_name" />
この問題にはバリエーションがあります。 "Settings"と呼ばれるアクティビティを起動し、同じエラーを取得し、マニフェストに提案されたすべての変更を行っても問題は修正されませんでした。
呼び出しアクティビティでは、Android.provider.Settingsを使用/インポートしていました。そのため、アクティビティを起動しようとすると、2つの間で混乱していました。そのため、マニフェストではなくコードでこれを変更して、完全なパスを含めました。
Intent launchScr = new Intent(this, com.foo.bar.Settings.class);
そしてそれは働いた。もちろん、この特定の問題を解決する他の、そしてより良い方法は、私の活動により良い名前を使用することです。
問題のこのバリアントを持つHTHのだれでも。
アクティビティがこの属性で装飾されていることを確認してください:
[Activity(Label = "Your App Name", MainLauncher=true)]
注:必要な場合にのみMainLauncherを設定してください。
あなたの例外はあなたのクラスです-Facebook
またはExample
なぜなら、あなたはマニフェストのパッケージでcom.Android.myApp
ただし、facebook
アクティビティの場合は、com.Android.myApp.Facebook.Example
そして、
例があなたの活動手段である場合、あなたはあなたの活動をcom.Android.myApp.Facebook.Example
理由は、異なるパッケージから、またはアクティビティ名としてFacebook.Example
以下のようにアクティビティを宣言できる方が良い-
<activity
Android:name="com.Android.myApp.Facebook.Example"
Android:label="@string/app_name" />
これは、キャッシュされたマニフェストが同期しなくなると、大規模なプロジェクトで発生する可能性があります。 Android Studioターミナルで./gradlew clean
その後、Android StudioのメニューバーでFile> Invalidate Caches/Restartを適切に選択する
時には、異なるパッケージに同じクラス名(Intentの2番目のパラメーター)が存在することが原因です。
また、これは、startActivityを呼び出す代わりにstartServiceを呼び出すときに発生し、その逆も同様であることもわかりました。
クラスを文字列Intent intent = new Intent().setClassName(this.getPackageName(), "com.some.other.name");
から動的に変更したい場合、または "com.some.other.name"の代わりに配列またはその他の結果を置くことができる場合、このコードを使用する必要があります。乾杯!
これは、Activityオブジェクト(起動する必要がある)がある場合に機能します。
intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());