2

これがシナリオです。同じプロジェクトに 2 つの異なるパッケージがあります。パッケージcom.stable.app ActivityAから インテントActivityB (com.stable.app.in にあります) を介して起動しようとすると、このエラーが発生します。私のマニフェストは大丈夫だと思いますが、間違っているようです。私のマニフェストは次のとおりです。

<activity android:name=".in.Principal">
   <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

そして私のコードは次のとおりです。

final Intent intent = new Intent();                
intent.setClassName("com.stable.app.in", "com.stable.app.in.Principal");
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);

他のトピックにあるように思われる多くの提案を試しました。パッケージのルート全体をマニフェストに渡します。MAIN、LAUNCHER などをもっとカットしてみてください。

同じ問題が発生した場合、または潜在的な解決策がある場合は、ためらわずに返信してください。

4

2 に答える 2

1

これを少し複雑にします。プロジェクト内で別のアクティビティを開始する場合は、次のスニペットを使用できます。

final Intent intent = new Intent(this, ActivityB.class);
startActivity(intent);

これははるかに短く、はるかに重要です。アクティビティ名を文字列として使用しません。このように、IDE でアクティビティ クラス名をリファクタリングすると、コードも変更される可能性があります。文字列名を使用する場合、ほとんどの IDE はそれを変更しません。

また、マニフェスト ファイルでアクティビティを正しく宣言していることを確認する必要があります。完全なクラス名を使用する必要はありませんが、使用する場合.in.Principalは、マニフェスト ファイルのパッケージがcom.stable.app.

于 2012-07-25T09:13:23.103 に答える
0

要件に応じて、宣言するパッケージの数は、プロジェクトの要件によって異なります。完全なパッケージ名を使用して、マニフェスト ファイルでそのアクティビティ名を指定する必要があります。

あなたの場合、プリンシパルがcom.stable.app.inにあるアクティビティであるとします。したがって、マニフェストファイルで宣言する必要があります

<activity android:name="com.stable.app.in.Principal">
       <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
</activity>

上記のように。

于 2012-07-25T09:11:51.773 に答える