IT이야기

비 활동 클래스에서 getSystemService를 사용하는 방법

cyworld 2021. 10. 24. 21:19
반응형

비 활동 클래스에서 getSystemService를 사용하는 방법은 무엇입니까?


AlarmManager를 통해 알람을 트리거하는 애플리케이션을 구축 중입니다.

자체 비활동 클래스를 통해 알람을 호출할 수 있기를 원하지만 활동을 확장하지 않기 때문에 '컨텍스트'가 없는 것 같습니다. 이 개념은 저를 혼란스럽게 만들고 sdk 문서를 읽었습니다.

어떻게 사용할까요?

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

내 비활동 수업에서?

또한 컨텍스트를 가져오면 비활동 클래스에서도 SharedPrefs 및 Intents를 사용할 수 있다고 가정합니다.


선호하는 방법인 비활동 클래스에 컨텍스트를 전달하거나 애플리케이션의 기본 컨텍스트를 단일 항목으로 캡슐화하여 애플리케이션 내에서 컨텍스트에 액세스할 수 있도록 할 수 있습니다. 어떤 경우에는 이것이 좋은 해결책이 될 수 있지만 다른 경우에는 확실히 좋은 해결책이 아닙니다.

어쨌든, 를 통해 알람을 트리거하려면 알람 AlarmManagerService또는 더 나은 것에서 아직 상속되어야 한다고 확신합니다 IntentService. 그런 경우에는 this.getBaseContext()또는this.getApplicationContext()


Service그리고 Activity상속 Context- 따라서 getSystemService이러한 클래스에서 호출할 때 실제로 호출하는 것 super.getSystemService입니다.

당신이 갖고 싶어 Context다른 클래스에서 사용할 수를, 당신은 그 클래스의 메소드에 인수로 하나를 통과, 등에 대한 참조를 유지할 수 있습니다

편집 : 코드 샘플. 그러나 진지하게, 상속과 메서드를 이해한다면 매우 기본적입니다.

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);

비활동 클래스에 컨텍스트를 전달해야 합니다.

ReferenceURL : https://stackoverflow.com/questions/4141555/how-to-use-getsystemservice-in-a-non-activity-class

반응형