次のコードでActivityNotFoundException
を取得しています。
Main.Java
Intent intent = new Intent();
intent.setAction("com.test.app.TEST");
startActivity(intent); // ActivityNotFoundException
Manifest.xml
<activity Android:name=".MainActivity" Android:theme="@Android:style/Theme.Dialog">
<intent-filter>
<action Android:name="com.test.app.TEST" />
</intent-filter>
</activity>
Jpahnによって完全に簡潔に説明されているように、私もこの問題を抱えています。
前の期間は私に何の助けも与えませんでした。
これ(編集を含む元の質問のコピー)を正確に使用しても、ActivityNotFoundExceptionが発生します。
Main.Java
Intent intent = new Intent();
intent.setAction("com.test.app.TEST");
startActivity(intent); // ActivityNotFoundException
Manifest.xml
<activity Android:name=".MainActivity" Android:theme="@Android:style/Theme.Dialog">
<intent-filter>
<action Android:name="com.test.app.TEST" />
</intent-filter>
</activity>
これは、多くの試行錯誤の末、マニフェストのインテントフィルターにこれを追加するだけで解決されました。
<category Android:name="Android.intent.category.DEFAULT" />
したがって、最終的なマニフェストファイルには次のものが含まれていました。
<activity Android:name=".MainActivity" Android:theme="@Android:style/Theme.Dialog">
<intent-filter>
<action Android:name="com.test.app.TEST" />
<category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>
</activity>
アプリケーション内のmanifest.xmlでアクティビティを宣言してください。
<application>
<activity Android:name=".YourNewActivity"/>
</application>
新しいアクティビティを開始するには:
Intent intent = new Intent(main.this, YourNewActivity.class);
startActivity(intent);
mainは現在のアクティビティを表し、
アクティビティクラスをあるパッケージから別のパッケージに移動した後、このエラーが発生しました。クリーンビルドはそれを解決しました(プロジェクト->クリーン)。
を追加します。 (ドット)Androidマニフェストのアクティビティ名の前。したがって、Android:name = "。WordsToSpeakMainActivity"である必要があります。
Androidフレームワーク、1-暗黙のインテント使用しているインテントには2つのタイプがあります。
_<activity Android:name=".MainActivity" Android:theme="@Android:style/Theme.Dialog">
<intent-filter>
<action Android:name="com.test.app.TEST" />
</intent-filter>
</activity>
_
インテントフィルターに1行追加するだけです
_<intent-filter>
<action Android:name="com.test.app.TEST" />
<category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>
_
2-明示的な意図
_Intent i=new Intent(CurrentActivity.this,WhereWeWantToGoActivity.class);
_
startActivity(i);
安全のために、次のように新しいアクティビティを呼び出すこともできます。
Intent intent = new Intent();
intent.setClass(this, THECLASSNAME);
startActivity(intent); //
ただし、アクティビティをandroidmanifestに追加し、を書き込む必要があります。その前に、例えば.
<activity Android:name=".YOURACTIVITYNAME"></activity>
@TomPaceの回答にいくつか追加します。答えは完全に正しいですが、より明確にするために:
ActivityNotFoundException
は、
<category Android:name="Android.intent.category.DEFAULT" />
Android OSがマニフェストファイルでこれを見るとき、このアクティビティがインテントを受け取ることができることを理解しているからです。
スローされるポイントActivityNotFoundException
は、activity(intent-creator-activity)が他のアクティビティ(intent-receiver-activity)のインテントを作成しようとすると、Android OSは、レシーバーアクティビティのインテントですが、レシーバーアクティビティは誰も受け取りません。Android OSはintent-creator-activityにnullまたは空のインテントを返します。そして、startActivity
はその例外をスローします。
この例外を回避するために、Android開発者からのコードを見つけました:
// Verify the original intent will resolve to at least one activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
文字列定義によってアクティビティを起動するには、次を使用します。
Intent intent = new Intent();
intent.setComponent(
new ComponentName("com.app", "com.app.activity.TheActivity"));
startActivity(intent);
この問題の解決策を見つけました... Androidスタジオプロジェクトで2つのモジュールを使用しています。ここでは、メインのマニフェストファイルにアクティビティを追加する必要がありました。
<activity Android:name="com.HeadApp.ARTry.UnityPlayerActivity"
Android:clearTaskOnLaunch="false" Android:label="@string/app_name"
Android:screenOrientation="portrait"
Android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
/>
ユニティアクティビティマニフェストで、アクティビティをコピーしてメインマニフェストに貼り付けるだけで、それが役に立てば幸いです。過去3週間、これに苦労していました。
AndroidManifest.xmlの最上部に、パッケージ属性が表示されます
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.Android.example"
次に、アクティビティタグに、name属性が表示されます。
<activity
Android:name=".Something"
パッケージ名とアクティビティ名を結合するときは、アクティビティの完全なパッケージ仕様を作成するようにしてください。
com.Android.example
+ .Something
= com.Android.example.Something
それ以外の場合は、ActivityNotFoundException
を取得します。