비 활동 클래스에서 getSystemService를 사용하는 방법은 무엇입니까?
AlarmManager를 통해 알람을 트리거하는 애플리케이션을 구축 중입니다.
자체 비활동 클래스를 통해 알람을 호출할 수 있기를 원하지만 활동을 확장하지 않기 때문에 '컨텍스트'가 없는 것 같습니다. 이 개념은 저를 혼란스럽게 만들고 sdk 문서를 읽었습니다.
어떻게 사용할까요?
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
내 비활동 수업에서?
또한 컨텍스트를 가져오면 비활동 클래스에서도 SharedPrefs 및 Intents를 사용할 수 있다고 가정합니다.
선호하는 방법인 비활동 클래스에 컨텍스트를 전달하거나 애플리케이션의 기본 컨텍스트를 단일 항목으로 캡슐화하여 애플리케이션 내에서 컨텍스트에 액세스할 수 있도록 할 수 있습니다. 어떤 경우에는 이것이 좋은 해결책이 될 수 있지만 다른 경우에는 확실히 좋은 해결책이 아닙니다.
어쨌든, 를 통해 알람을 트리거하려면 알람 AlarmManager
이 Service
또는 더 나은 것에서 아직 상속되어야 한다고 확신합니다 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
'IT이야기' 카테고리의 다른 글
Eclipse에서 XML 파일 실행을 중지하는 방법 (0) | 2021.10.24 |
---|---|
name()과 local-name()의 차이점 (0) | 2021.10.24 |
Java BigInteger의 제곱근을 어떻게 찾을 수 있을까? (0) | 2021.10.24 |
브라우저가 파일을 다운로드하도록 강제하는 방법 (0) | 2021.10.23 |
JavaScript는 단일 스레드이므로 HTML5의 웹 작업자 다중 스레드 (0) | 2021.10.23 |