2011-03-05 50 views

回答

1

我猜你的问题属于appWidgets。如果不是这样,下面的答案可能不太有用,但我认为,尽管你仍然可以将其中的一部分调整为自己的用途。

首先声明一些动作(S),像这样:

public static final String ACTION_HIDE_GUIDE_OVERLAY = "dk.something.appwidget.calendar.guide.hide"; 

使用动作(一个或多个)申报的意图和的PendingIntent:

Intent intent = new Intent(context, CalendarService.class); 
    intent.setAction(CalendarService.ACTION_HIDE_GUIDE_OVERLAY); 
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    PendingIntent buttonPendingIntent1 = PendingIntent.getService(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

然后用远程视窗注册的PendingIntent为您的小工具:

views.setOnClickPendingIntent(R.id.calendar_button_1, buttonPendingIntent1); 

最后,在的onStartCommand或onHandleIntent您服务,检查的意图来确定的行动,调用其中的方法:

if (intent.getAction().equals(CalendarService.ACTION_INITIALIZE_CALENDAR)) { 
     int[] appWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS); 
     onInitializeCalendar(appWidgetIds); 
} else if (intent.getAction().equals(CalendarService.ACTION_HIDE_GUIDE_OVERLAY)) { 
     int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
     onHideGuideOverlay(appWidgetId); 
} else ... 

注:代码片段拍摄几乎可以直接从我的玻璃窗口小部件,所以以使其适应自己使用,你会用您自己的两个操作(每个按钮一个操作)替换操作常量,将R.id.calendar_button_1替换为其中一个按钮的实际ID,将CalendarService替换为您自己的服务类的名称以及onInitializeCalendar和onHideGuide使用要调用的服务类中的两个方法的名称覆盖。

如果您一次只能看到您的小部件的一个实例,那么您无需摆弄appWidgetId,但可能无法保证这一点。我有一些设置可以根据窗口小部件实例和窗口小部件实例的不同而不同,因此我将点击的appwidget的id放入了意图中,服务可以在服务请求时获取它。