現在の実行中のアクティビティのコンテキストを取得する

私はアンドロイド上で現在の実行中の活動のコンテキストを取得する方法があるのだろうかと思います。たとえば、アクティビティクラスがあり、実行中です。私が望むのは、別のシンプルクラスを呼び出して、アクティビティクラスから呼び出されたいくつかの関数を実行することです。これを行うことで、シンプルクラスのアクティビティクラスのコンテキストを設定する必要があります。逆に、現在の実行中アクティビティのコンテキストを持つ必要があります。そのため、シンプルクラスは実際に実行中のアクティビティから呼び出された関数を実際に実行できます。

以下は私のプロジェクトのソフトコードです。

public class Main1 extends Activity {
    private static GetAPNsInfo getAPNsInfo = new GetAPNsInfo();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
                getAPNsInfo.doSomething();
    }
}

public class GetAPNsInfo {
    public void doSomething() {
        Button button = currentRunningActivityContext.findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
               //TODO Auto-generated method stub
            }
        });
    }
}

最後に、このスレッドの私の目的は、現在実行中のアクティビティ情報を取得するには良い方法が必要だということです。

これは私の自己を見つけた解決策です。しかし、このケースを完全に解決するわけではありません。 Manifest.xmlに受信者を追加することができます。これにより、バックグラウンドアプリケーションが実行されます。


        
            
        

    

バックグラウンドアプリケーションインタフェースは次のようになります。

public class RunningActivityCapture extends BroadcastReceiver {

    @Override
    public void onReceive(Context aContext, Intent intent) {
        String action = intent.getAction();

        if (action.equals(Intent.ACTION_ALL_APPS)) {
            Activity activty = intent.getCurrentActivity();
            Session session = new Session();
            session.setRunningActivity(activty);
        }
        return;
    }
}

私はバックグラウンド・アプリケーションから設定したセッション・クラスからアクティビティーを取得するだけです。これはこの問題を解決するための私の最初のアイデアです。しかし、コードは正しくありません。だから私はあなたの助けが必要です。

0

1 答え

ヘルパークラスでこの MainActivity の使い方を尋ねる場合は、Activity is Contextとしてアクティビティ自体をクラスに渡すことができます。あなたのコンストラクタは次のようになります:

public GetAPNsInfo(Context context) {
    ...
}

フィールドにコンテキストを格納し、後で使用します。あなたはで初期化します

private static GetAPNsInfo getAPNsInfo = new GetAPNsInfo(this);

アプリケーションで ANY アクティビティのコンテキストを取得する方法を尋ねている場合は、推奨されていないと思います。

3
追加された
それは私が必要としないものです。私はすでにスレッドに最終目的を追加しました。私が望むのは、現在実行中の活動情報を得ることです。 100個のアクティビティに対して100個のタスクが同じものを実行している場合、各アクティビティに対してコンテキストを設定する必要がありますか?これを行うと巨大な仕事になるでしょう。
追加された 著者 user964409,
おそらく、私のアプリケーションで何らかのアクティビティを取得することはお勧めできません。しかし、トップランニング活動を1つだけ得る方法があるはずです。これを解決するために受信機を使用してもいいですか?
追加された 著者 user964409,
おそらく、1つのトップアクティビティをキャプチャするための良い方法があります。私はActivityManagerとRunningTaskInfoを探しています。これらは助けになるはずです。
追加された 著者 user964409,
うん、それはほんの一例です。しかし、実際には、私のアプリケーションにそのボタンがない場合は、これを行うべきではありません。ちなみに、R.javaのボタンのidはレイアウトには存在しませんが、アプリケーション実行時にエラー(コンポーネントが見つかりません)(エラーはコードに表示されません)が発生します。他の状況では、現在のアクティビティのコンテキストを取得し、このアクティビティでgetContentResolverを呼び出します。
追加された 著者 user964409,
たぶんあなたは受信機を知っているべきです。私は答えのサンプルを投稿します。
追加された 著者 user964409,
何のためにこれをしようとしていますか?おそらくもっと良い方法があります
追加された 著者 Craigy,
ほとんどの場合、これを実行しようとすると、より多くの問題が発生します。たとえば、あなたの質問には、 findViewById を使用して現在実行中のアクティビティのボタンを見つけるコードがあります。しかし、そのアクティビティにそのようなボタンがないとどうなりますか?
追加された 著者 Craigy,