안드로이드 개발 질문/답변
(글 수 45,052)
<meta charset="utf-8">위젯에서 서비스를 제어하려고 하는데요.
위젯에 A,B,C 세개의 버튼이 있습니다.
A를 클릭하면 서비스의 a()메서드를 B를 클릭하면 서비스의 b() 메서드를 마찬가지로 C도 클릭할수 있도록 구현 중입니다.
PendingIntent.getService 를 이용하였고
서비스에서는 intent에 있는 Extra의 값에 따라서 각 함수로 분기하도록 하였습니다.
문제는 다음과 같이 코딩했을 때,
Intent iA = new Intent(context, ServiceEx.class);
iA.putExtra("from", 1);
views.setOnClickPendingIntent(R.id.btn_a, PendingIntent.getService(context, 0, <meta charset="utf-8">iA , PendingIntent.FLAG_UPDATE_CURRENT));
Intent iB = new Intent(context, ServiceEx.class);
iB.putExtra("from", 2);
views.setOnClickPendingIntent(R.id.btn_b, PendingIntent.getService(context, 0, iB , PendingIntent.FLAG_UPDATE_CURRENT));
Intent iC = new Intent(context, ServiceEx.class);
iC.putExtra("from", 3);
views.setOnClickPendingIntent(R.id.btn_c, PendingIntent.getService(context, 0, iC , PendingIntent.FLAG_UPDATE_CURRENT));
서비스쪽에 넘어오는 extra의 값이 모두 3으로만 찍힙니다.
위에 flag를 FLAG_NO_CREATE로 하였을때에는 1만찍히고요,
각 버튼에따라서 1,2,3 으로 다양하게 찍히도록 할수는 없나요?
2010.07.16 10:19:47
음...제가 알기로는 아쉽게도 PendingIntent 는 중복해서 생성해 사용하실 수 없습니다.
하지만, 원하시는 기능은 Service 를 시작하기 위한 PendingIntent 대신 Broadcast Intent 를 사용하는
다음과 같은 방법으로도 처리하실 수 있을거 같습니다.
1. 구현된 위젯 프로바이더에 각각의 버튼이 눌렸을 경우, 이벤트를 수신하기 위한 Intent Filter 를 추가한다.
(ex> BUTTON1_CLICK , BUTTON2_CLICK, BUTTON3_CLICK)
2. 각각의 버튼이 클릭될 때, Service 를 시작하게 하는 대신, Broadcast Intent 를 송신하도록 한다.
3. 위젯 프로바이더의 onReceive 메서드를 오버라이드 한 후, 수신 받은 Intent 를 확인 한다.
4. Intent 의 종류를 판단한 후, 원하는 Extra 값을 추가하여 직접 Service 를 시작한다. (PendingIntent 대신 startService 를 직접 호출)
이와 관련된 내용을 정리해서 블로그에 올려둔 적이 있는데, 혹시 참고가 되실까 링크 첨부합니다.