AlarmManagerを介してアラームをトリガーするアプリケーションを構築しています。
独自の非アクティビティクラスを介してアラームを呼び出すことができますが、アクティビティを拡張していないため、「コンテキスト」が表示されません。この概念は私を混乱させ、sdkのドキュメントを読みました。
どのように使用しますか:
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
私の非活動クラスで?
また、コンテキストを取得すると、非アクティビティクラスでもSharedPrefsとIntentsを使用できるようになると思いますか?
コンテキストを非アクティビティクラスに渡すことができます。これは、好ましい方法です。または、アプリケーションのベースコンテキストをシングルトンにカプセル化して、アプリケーション内のどこからでもコンテキストにアクセスできます。いくつかのケースではこれは良い解決策かもしれませんが、他のケースでは確かに良い解決策ではありません。
とにかく、AlarmManager
を介してアラームをトリガーする場合、アラームはService
から継承するか、IntentService
から継承する必要があります。そのような場合は、this.getBaseContext()
またはthis.getApplicationContext()
Service
とActivity
はContext
から継承します。したがって、これらのクラスでgetSystemService
を呼び出すときは、実際にsuper.getSystemService
。
別のクラスでContext
を使用できるようにする場合は、そのクラスのメソッドに引数として渡すことができます。また、参照を保持することもできます。
編集:サンプルコード。しかし、真剣に、それはextremely基本です-継承とメソッドを理解している場合。
class MyActivity extends Activity { // Activity extends Context, so MyActivity also extends Context
void someMethod() {
MyOtherClass.useStaticContext(this);
MyOtherClass instance = new MyOtherClass();
instance.useInstanceContext(this.getApplicationContext());
}
}
class MyOtherClass {
static void useStaticContext(Context context) {
}
void useInstanceContext(Context context) {
}
}
以下を試すことができます。ビューが実行されている現在のコンテキストを取得できます。
alarmTest = (AlarmManager)this.getContext().getSystemService(Context.ALARM_SERVICE);
コンテキストを非アクティビティクラスに渡す必要があります。