web-dev-qa-db-ja.com

ActivityNotFoundException?

次のコードで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>
15
jpahn

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>
25
Tom Pace

アプリケーション内のmanifest.xmlでアクティビティを宣言してください。

<application>
    <activity Android:name=".YourNewActivity"/>
</application>

新しいアクティビティを開始するには:

Intent intent = new Intent(main.this, YourNewActivity.class);
startActivity(intent);

mainは現在のアクティビティを表し、

9
BadSkillz

アクティビティクラスをあるパッケージから別のパッケージに移動した後、このエラーが発生しました。クリーンビルドはそれを解決しました(プロジェクト->クリーン)。

9
Conrad

を追加します。 (ドット)Androidマニフェストのアクティビティ名の前。したがって、Android:name = "。WordsToSpeakMainActivity"である必要があります。

5
Mudassir

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);

4
Jake Conner

安全のために、次のように新しいアクティビティを呼び出すこともできます。

Intent intent = new Intent();
intent.setClass(this, THECLASSNAME);
startActivity(intent); // 

ただし、アクティビティをandroidmanifestに追加し、を書き込む必要があります。その前に、例えば.

<activity Android:name=".YOURACTIVITYNAME"></activity>
3
theXs

@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);
}

Android開発者:インテントフィルター

2
rcelik

文字列定義によってアクティビティを起動するには、次を使用します。

Intent intent = new Intent();
intent.setComponent(
        new ComponentName("com.app", "com.app.activity.TheActivity"));
startActivity(intent);
1
Daniel De León

この問題の解決策を見つけました... 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を取得します。

0
W.K.S