別のアクティビティからアクティビティを呼び出そうとすると、この例外が発生します。完全な例外は
Android.content.ActivityNotFoundException:明示的なアクティビティクラス{com.x.y/com.x.y.class}が見つかりません;
intent.setClass("com.x.y","com.x.y.className")
を実行しています。className
はアクティビティクラスの名前で、com.x.y
は、それが存在するパッケージです。
私のAndroidManifest.xmlのコンテンツは次のとおりです。
<activity Android:name="com.x.y.className" Android:label="@string/app_name">
私は何かが欠けていますか?
たぶん、manifest.xmlファイルに新しいアクティビティを追加したことを確認する必要があるかもしれません
例:
<activity
Android:name=".className"
Android:label="@string/app_name" >
</activity>
他の人が似たようなものに遭遇してこの投稿にたどり着いた場合、私が抱えていた問題があなたの時間を節約するかもしれません。 OPの問題に関連していないかもしれませんが、ActivityNotFound例外に関連しているdef。
私は以下を使用してアクティビティをロードしようとしました:
_Intent intent = new Intent( this, class );
_
ただし、コードを何度もチェックして再チェックしたにもかかわらず、ActivityNotFoundException
を取得し続けました。
私が得ていたこの例外は、実際には意図によるものではありませんでしたが、ロードされたアクティビティ内でRuntimeException
をスローするコードを実行していました。 (私の問題はTypeface.createFromAsset()
が原因でした)
アクティビティで同様のRuntimeExceptionが発生している可能性があります。
これが当てはまるかどうかを確認するには、tryコードをtry catchブロックに入れます。そのようです:
_try {
/* your code */
...
} catch ( ActivityNotFoundException e) {
e.printStackTrace();
}
_
アプリを再度実行し、LogCatを確認します。同じ問題である場合は、実際の問題を指す「原因:」エントリでRuntimeExceptionが表示されます。
私はこれを理解しようとしてかなりの時間を費やしました。これが誰かの時間を節約することを願っています。
呼び出すアクティビティは、独自のパッケージのマニフェストだけでなく、CALLINGパッケージのマニフェストにも表示される必要があります。
マニフェストからアクティビティを削除してから、再度追加してください。このタイプは、XMLを直接書き込むタイプではありません。代わりに、Application > Application nodes > add
、アクティビティを選択し、ファイルソースを参照します。
これは私のために働いた。
intent.setClassは、「パッケージコンテキスト」および「クラス」としてパラメーターを取ります。例は次のとおりです。
intent.setClass(CurrentActivity.this, TargetActivity.class);
また、アクティビティがマニフェストファイルに登録されているかどうかを確認する必要があります。
新しいアクティビティを追加し、manifest.xmlで定義しましたが、まだ「明示的なアクティビティクラスが見つかりません」というエラーが表示されていました。 Eclipseを使用しています。私の問題の解決策は、プロジェクトを「きれいにする」ことでした。 Eclipseのメインメニューから:Project | Clean ....次に、プロジェクトを選択してクリーンアップします。
メニューコードにgetActivityContext()
(Activity.this
の代わりに)を使用して作業を保存し、毎回編集せずに各アクティビティにコピーアンドペーストしました。
それらをActivity.this
に置き換えましたが、問題はなくなりました。
Android男はそれをしなくても回避策を講じることができます。それがどうなるか聞きたいのですが。
(内部クラスとして)別のクラス内にアクティビティを実装すると、ActivityNotFoundExceptionが発生しました。
//... inside the utility class Pref
public static class Activity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
//...
マニフェスト内で次のように宣言されています。
<activity Android:name=".Pref.Activity"
...
これを通常のクラス(パブリッククラスPrefActicity)として宣言し、それに応じてマニフェストを変更した後、通常どおり機能しました。
ちょっと、別の形式のIntentコンストラクターを使用する必要があります。これにより、1秒以内に問題が確実に解決されます。
例:
Intent inte=new Intent(getBaseContext(),"your class name with .class extension ");
startActivity(inte);
これは完璧に機能し、私はこのコードをチェックしました。
このコードをmanifiest.xml
ファイルに追加できます
action Android:name="com.kaushalam.activity101activity.SecondActivity"
category Android:name="Android.intent.category.DEFAULT"
ミーナの答えに加えて。アクティビティを内部静的クラスとして宣言する場合、次のようなマニフェストにアクティビティを記述する必要があります。
<activity Android:name=".app.FragmentLayoutSupport$DetailsActivity" />
ここで.appはパッケージ名に由来し、.helpers.afdfa $ afdaになります
私も同じケースを得ました。ピアソンの答えを読んだ後、アクティビティを修正し、書いたことを知りました
public void onCreate(Bundle s)
しかし、実際には
protected void onCreate(Bundle s)
そして、それは今すぐ動作します!
Eclipseを再起動し、マニフェストファイルを再度確認します。それぞれのアクティビティが見つからない場合は、アクティビティを追加して再試行してください。同様の問題を解決しました。
ドキュメントを見る here 欲しいものは:
intent.setClassName("com.x.y", "className");
以下を使用してみてください。
intent.setClassName("com.x.y", "com.x.y.className");
これは私のために働く
この例外は、アプリにライブラリを含める場合、およびライブラリがライブラリプロジェクトで定義されたアクティビティを呼び出している場合にも発生します。この場合、ライブラリのマニフェストを呼び出し元のアプリのマニフェストとマージする必要があります。
ADTバージョン20では、呼び出し元アプリのproject.propertiesに次のステートメントを追加することでこれを行うことができます。
manifestmerger.enabled = true
プロジェクトのbinフォルダーにあるAndroid Manifest File。 binフォルダーは元のマニフェストと一致しませんでしたが、これはおそらくEclipseの間違いです。
呼び出しているアクティビティには、「sheme」は含まれず、intent-filterが含まれます。
<activity Android:name=".SecondActivity">
<intent-filter>
<action Android:name="com.example.sj.myapplication.SecondActivity"/>
<category Android:name="Android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
したがって、呼び出しコードでは:
Intent intent=new Intent("com.example.sj.myapplication.SecondActivity");
startActivity(intent);
これは、Activityオブジェクト(起動する必要がある)がある場合に機能します。
intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());
ええ、私もこの問題を抱えています。プロジェクトを更新しました。そして、すべてが正常に動作します。
私が同じ問題を抱えているとき。ライブラリクラスファイルを使用してAndroidマニフェストファイルに書き込み、この部分をライブラリプロジェクトマニフェストファイルから削除する場合は、この部分>>を実行すると、完全に機能します。
このエラーに対する私の解決策は、マニフェストの名前の前にパッケージ名を追加することでした。
私は次の活動をしました:
id.scanner.main.A1
id.scanner.main.gallery.A2
私のマニフェストには次のものが含まれていました。
<activity Android:name=".A1" ....></activity>
<activity Android:name=".A2" ....></activity>
これで問題が解決しました。
<activity Android:name=".A1" ....></activity>
<activity Android:name="gallery.A2" ....></activity>