안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요^ ^
오늘도 어김없이 질문을 하게 되었습니다.
AlarmManager를 이용하여서 일정시간마다 특정일을 수행한 후, 수행한 일이 어떠한 조건을 만족하게 되면 AlarmManager를 종료하는 코드를 작성하려고 합니다.
먼저 Broadcast를 사용했습니다. Shared Preferences에 저장된 값을 이용을 하려고 했습니다. 그런데 receiver로 사용되는 클래스에서는 getSharedPreferences를 사용할 수가 없더라구요. 그래서 receiver를 호출하는 Activity에서 putExtra로 값을 넘겨주려고 했습니다만, receiver에서 getStringExtra를 이용해 값을 출력해보면 제일 처음 putExtra로 들어간 값만이 출력이 되더라구요.
질문입니다.
1. putExtra로 서로 다른 값을 반복적으로 넘겨주려고 합니다. 어떻게 해야할까요? setResult를 이용해서 어떠한 값을 넘겨주어야 putExtra의 값이 갱신이 될까요? removeExtra를 써봤는데요. 어느것도 효과가 없었습니다.
2. Activity 나 View를 상속받지 않은 클래스에서는 SharedPreferences 같은 걸 사용을 할 수 없나요?? 일반 자바소스로 된 클래스에서 SharedPreferences를 이용하려면 어떻게 해야할까요?
답변부탁드리겠습니다.
2009.09.02 09:16:12
질문 추가입니다.
broadcastReceiver에서 어떠한 값을 세팅했을때, 알람매니져나 Receiver를 호출한 activity에서 그 값을 잡을 수 있는 방법이 있을까요?
static변수를 사용하는 방법 말구요...
2009.09.02 09:53:24
1. Intent에 putExtra는 중복 설정하면 갱신됩니다.
2. 일반적인 참조와 같을 것 같습니다. Context를 넘겨서 사용하거나 static으로 참조하면 될듯합니다.
3. Receiver를 호출한 액티비티가 브로드캐스트한 액티비티를 가리키는 것인가요?
그렇다면 receiver로 받아도 될듯합니다.
2. 일반적인 참조와 같을 것 같습니다. Context를 넘겨서 사용하거나 static으로 참조하면 될듯합니다.
3. Receiver를 호출한 액티비티가 브로드캐스트한 액티비티를 가리키는 것인가요?
그렇다면 receiver로 받아도 될듯합니다.
2009.09.02 10:23:06
1. intent putExtra
<broadcast의 onReceiver()에서 아래와 같은 작업을 합니다>
위의 코드에서 AlarmManger의 경우는 전역변수로 선언이 되었습니다.
<Broadcast하는 activity의 onResume() 에서 아래와 같은 작업을 합니다>
in.putExtra("APPREGNO", getAppRegNoFromPref());
in.removeExtra("TRXAPPROVALNO");
in.putExtra("TRXAPPROVALNO", getTrxApprovalNoFromPref());
this.AppRegNo=arg1.getStringExtra("APPREGNO");
this.TrxApprovalNo=arg1.getStringExtra("TRXAPPROVALNO");
*부모Activity<->Broadcasting Activity<->Receiver
Broadcast를 하는 Activity의 종료버튼에서 finish()를 사용하여서 onPause() 바디에서 alarmManager를 cancel()하고 있습니다.
Broadcast하는 activity의 부모activity에서 또 다시 BroadCast하는 activity를 실행하는 형태입니다.
출력을 Receiver에서 하고 있는데, 제일 처음 putExtra값이 출력이 되고 있습니다.
2. static으로 참조를 한다는 것은 어떤 걸 의미하는건가요? Broadcasting하는 activity의 전역변수로 선언된 static 변수를 말씀하시는건가요??
3. 이 답변은 제가 이해를 잘 못하겠습니다. 조금 더 부연설명을 부탁드리고 싶습니다.