51

カスタムアクションを使用してアプリでアクティビティを開始しようとしています。いくつかの答えを見つけましたが、java.lang.RuntimeExceptionインテント{act=com.example.foo.bar.YOUR_ACTION}を処理するアクティビティが見つかりませんでした。

これは私のマニフェストファイルのアクティビティです:

<activity
    android:name=".FeedbackActivity" >  
    <intent-filter>
        <action android:name="com.example.foo.bar.YOUR_ACTION" />
    </intent-filter>
</activity>

そして、これが私が活動を始める方法です:

Intent intent = new Intent("com.example.foo.bar.YOUR_ACTION");
startActivity(intent);

どんな助けでも大歓迎です。

4

4 に答える 4

136

必要なのは、デフォルトのカテゴリをインテントフィルタに追加することだと思います。

<activity
    android:name=".FeedbackActivity" >  
    <intent-filter>
        <action android:name="com.example.foo.bar.YOUR_ACTION" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

詳細については、この回答を参照してください。

于 2012-06-13T05:48:32.910 に答える
39

私はあなたがあなたの意図を間違って作成していると思います。このようにしてみてください:

String CUSTOM_ACTION = "com.example.foo.bar.YOUR_ACTION";

//Intent i = new Intent(this, FeedBackActivity.class);  // <--- You might need to do it this way.
Intent i = new Intent();
i.setAction(CUSTOM_ACTION);

startActivity(i);
于 2012-06-06T21:08:56.477 に答える
4

デフォルトとしてカテゴリを追加し、intent-filterするだけです。

暗黙のインテントは完全に機能し、多くの場合、クラス名を使用するよりも、Intent-actionで暗黙のインテントを使用してサービス/アクティビティを呼び出す方が適切です。

以前は、適切なコンテキストで、パッケージマネージャークラスからstartActivty() / startService()このメソッドを使用できます。'queryIntentActivities(Intent intent, int flags)'

これは、ActivityManager(アクティビティの起動を担当)がAndroidシステムがあなたのインテントと一致しているかどうかを確認するのに役立ちます。

そうでない場合は、リストサイズ0または>0を返します。

これにより、アプリが電話を受けているかどうかを確認することもできます。この場合、アプリがインストールされていない/問題が発生している場合でも、クラッシュすることはありませんが、ログに警告がスローされます。アプリが起動しないことを除けば、ユーザーは大きな問題に直面することはありません。

(ツアーアプリがクラッシュした場合、ユーザーは決してあなたを許しません)。

これがお役に立てば幸いです!!! ハッピーコーディング。:)

于 2014-04-12T08:33:19.057 に答える
2

動的機能モジュールにあるアクティビティを起動しようとして、アクションStringから開始しようとしたときに、コンパイル時にアクティビティを名前で解決できないため、同じ問題に直面しました。そのため、アクションを設定しましたが、正しいパッケージ名を設定するまで、アクティビティは毎回クラッシュします(インテントbla blaを処理するアクティビティが見つかりませんでした。)。

Context c = getApplicationContext();// flag would be require Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag
Intent i = new Intent(action_string);
i.setPackage(context.getPackageName());//this did the trick actually
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

マニフェストで:Googleドキュメントのインテントフィルターにカテゴリのデフォルトを追加します

<category android:name="android.intent.category.DEFAULT"/>

注:暗黙のインテントを受信するには、インテントフィルターにCATEGORY_DEFAULTカテゴリを含める必要があります。startActivity()メソッドとstartActivityForResult()メソッドは、すべてのインテントをCATEGORY_DEFAULTカテゴリを宣言したかのように扱います。インテントフィルターで宣言しない場合、暗黙のインテントはアクティビティに解決されません。

于 2020-07-21T07:58:24.293 に答える