6

このコードで別のアクティビティからアクティビティを呼び出しています:

Intent intent = new Intent(context, mClass);
context.startActivity(intent);

そして、このコードによって開始された私の新しいアクティビティから。この活動を開始する活動を知りたいです。この目的のためにこのコードを使用しました

Intent intent = getIntent();
Class<?> c = intent.getClass();
if (c != OffersActivity.class) {
    prepareForNotifications();
    setListAdapter();
}

しかし、このコードでは、このアクティビティを開始するクラス名を取得できません。私は本当に助けが必要です。

ありがとう

4

4 に答える 4

12

メソッドがありますがgetCallingActivity()、呼び出し元のアクティビティがあなたを呼び出した場合にのみ機能しますstartActivityForResult(). ライブラリがそれを使用し、そのように呼び出す必要があると言っているのを見たことがありますが、率直に言って、それは少し厄介です。簡単な答えは、あなたが知ることになっていないということです。Android は疎結合のアクティビティのシステムであるため、呼び出しアクティビティはアクティビティにとって実際の意味を持つべきではありません。アクティビティに必要な情報はインテントに明示的に配置する必要があるため、誰があなたに電話したかを本当に知りたい場合は、発信者がその追加情報を入力する必要があります。もちろん、嘘をついているのかどうかはわかりません。これをセキュリティ関連に使用しようとしないでください。ただし、発信者に基づいて決定しているものは何でも、発信者が代わりに渡す必要があるものであることをお勧めします。システムと戦うことは苦痛につながるだけなので、なぜこれをやりたいのかを再考する時かもしれません.

于 2012-12-28T16:42:10.517 に答える
2

私は提案します:

public static final String INTENTSENDER = "sender";

void mMethod() {
    Intent intent = new Intent(context, mClass);
    intent.putExtra(INTENTSENDER, mClass);
    context.startActivity(intent);
}

誰が送信したかを知る:

Class<?> c = (Class<?>)intent.getExtras().get(INTENTSENDER);

ただし、これを使用することもできます。

ComponentName componentName = this.getCallingActivity();

componentNameこれで、インテントの送信者を取得するために使用できます。

于 2012-12-28T14:37:06.657 に答える
1

たぶん、それらを呼び出すときにインテントでエクストラパラメータを使用するのが最善かもしれません...たとえば、呼び出し元のアクティビティでIntent.putExtra(PARAM、value) ...そしてチェックする開いたアクティビティで:

intent.getStringExtra(PARAM)

于 2012-12-28T14:27:33.560 に答える
-2

getParentActivity() はあなたが探しているものではありませんか?

于 2014-03-23T12:20:46.050 に答える