57

私はAlarmManagerを介してアラームをトリガーするアプリケーションを構築しています。

独自の非アクティビティクラスを介してAlarmを呼び出せるようにしたいのですが、Activityを拡張していないため、「コンテキスト」がないようです。この概念は私を混乱させます、そして私はsdkドキュメントを読みました。

どのように使用しますか:

alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

私の非活動クラスでは?

また、コンテキストを取得すると、非アクティビティクラスでもSharedPrefsとIntentsを使用できるようになると思いますか?

4

5 に答える 5

43

推奨される方法である非アクティビティクラスにコンテキストを渡すか、アプリケーションの基本コンテキストをシングルトンにカプセル化して、アプリケーション内のどこからでもコンテキストにアクセスできるようにすることができます。場合によってはこれが良い解決策かもしれませんが、他の場合には確かに良い解決策ではありません。

とにかく、もしあなたが経由でアラームをトリガーしたいのなら、AlarmManager私はアラームがServiceそれ以上のものから継承するべきだと確信しています。そのような場合、あなたはまたはIntentService経由でコンテキストにアクセスできます。this.getBaseContext()this.getApplicationContext()

于 2010-11-10T05:55:02.870 に答える
20

ServiceそしてActivity継承元Context-したがってgetSystemService、これらのクラスで呼び出しているときは、実際には。を呼び出していsuper.getSystemServiceます。

別のクラスで使用できるようにしたい場合はContext、そのクラスのメソッドへの引数として1つを渡したり、そのクラスへの参照を保持したりできます。

編集:コードサンプル。しかし、真剣に、それは非常に基本的です-継承とメソッドを理解している場合。

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) {
  }
}
于 2010-11-10T05:52:15.850 に答える
15

次のことを試すことができます。これにより、ビューが実行している現在のコンテキストを取得できます。

alarmTest = (AlarmManager)this.getContext().getSystemService(Context.ALARM_SERVICE);
于 2011-06-28T22:26:45.043 に答える
4

非アクティビティクラスにコンテキストを渡す必要があります。

于 2010-11-10T05:48:42.557 に答える
0

アクティビティでこれを使用します:

private Context context = this;

........
if(Utils.isInternetAvailable(context){
Utils.showToast(context, "toast");
}
..........

Utilsで:

public class Utils {

    public static boolean isInternetAvailable(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
    }

    public static void showToast(Context context, String text) {
        Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
    }
}
于 2020-12-05T13:44:38.363 に答える