AppWidgetProvider를 구현ㅇ해서 아래 처럼 PendingIntent 로 activity를 호출하는데
서비스에 외부 인터페이스로 기능을 구현했습니다.
아래처럼 PendingIntent 를 통해 호출하면 MainEmpty Activity의 화면이 뜨는데요.
저는 화면없이 기능을 호출하고 싶습니다.
그래서 생각한것이 아래처럼 BR호출인데
이것도 Activity가 아니라AppWidgetProvider를 상속 구현한거라고 sendBroadcast 메소드 없음 에러가 납니다.
Intent intent = new Intent();
intent.setAction("dev.widget.ONOFF");
sendBroadcast(intent);
목적은 위젯을 클릭하면 서비스의 함수를 호출하는것인데요.
화면없이 실행해서 위젯의 ON/OFF 이미지를 바로 바꾸고 하는게 기능은데요
위젯 이미지 변경은 커녕 화면 없이 서비스르 호출하는 방법을 못찾고있습니다.
방법좀 아시면 부탁드립니다.
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
final int N = appWidgetIds.length;
for(int i = 0; i < N; i++){
int appWidgetId = appWidgetIds[i];
Log.d("DEV","AppWidgetProvider : onUpdate["+i+"]:"+appWidgetId);
Intent intent = new Intent(context, MainEmpty.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
views.setOnClickPendingIntent(R.id.btn_widget, pi);
//views.setImageViewResource(R.id.btn_widget, R.drawable.icon_widget_on);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
onReceive를 오버라이드하시구요
intent.setAction("구분자") 를 주시구요
PendingIntent pi= PendingIntent.getBroadcast(......)
이렇게 하시면 클릭시에 onReceive 함수로 브로드캐스트가 넘어갑니다 그러면 OnReceive 함수에서
String action = intent.getAction();
if (action.equlas("구분자") {
원하는 함수 호출
}
하시거나 아예 서비스를 호출하고 싶으시면 PendingIntent.getService(...........) 하시면 서비스가 호출 됩니다. 그렇게 되면 onReceive는 오버라이드 하지 않으셔도 되죠-




onUpdate() 매개변수로 넘어오는 context로 sendBroadcast()함수 호출이 불가능 한가요??