[英]Android home screen widget
我是第一次进行小部件开发。 所以,请忍受我。 我有一个Android服务,该服务从onStart()
启动小部件。 因此,我在WidgetProvider
类的onUpdate()
并更新了按钮之类的视图。 现在我的问题是-
1)如何处理窗口小部件中的按钮按下并告诉服务按钮按下,以便该服务能够正常工作?
2)服务完成工作后,需要更新小部件按钮,我该如何处理?
3)当应用程序被杀死时,服务也将被杀死。 因此,当我单击小部件时,如何确定该应用已被杀死并打开该应用?
4)如果应用程序中的UI正在与服务对话并从服务接收响应,我如何也将这些响应告知小部件?
我的小部件代码是这样的-
public class MyWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
RemoteViews remoteViews;
ComponentName componentName;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
componentName = new ComponentName(context, MyWidgetProvider.class);
remoteViews.setOnClickPendingIntent(R.id.button1,getPendingSelfIntent(context, "Play",componentName));
remoteViews.setOnClickPendingIntent(R.id.button2,getPendingSelfIntent(context, "Pause",componentName));
appWidgetManager.updateAppWidget(componentName, remoteViews);
}
@Override
public void onReceive(Context context, Intent intent)
{
super.onReceive(context, intent);
if ("Play".equals(intent.getAction())) {
//I really dont know what to do here....
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews;
ComponentName watchWidget;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
watchWidget = new ComponentName(context, MyWidgetProvider.class);
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
}
protected PendingIntent getPendingSelfIntent(Context context, String action, ComponentName componentName) {
Intent intent = new Intent(context, MyService.class);
intent.setAction(action);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, componentName);
return PendingIntent.getService(context, 0, intent, 0);
}
}
要求您在这方面帮助我
1)您已经使用getPendingSelfIntent()
方法进行了此操作。 尽管您的目标应为MyWidgetProvider
如下所示:
Intent intent = new Intent(context, MyWidgetProvider.class);
然后在onReceive
您将检查intent操作是否为“ Play”并从此处启动服务:
Intent serviceIntent = new Intent(context, MyService.class);
2)为了使您的服务与您的小部件通信,您需要发送广播:
Intent widgetUpdateIntent = new Intent(this, MyWidgetProvider.class);
widgetUpdateIntent.setAction(ApplicationEvents.DATA_FETCHED);//this is your custom action
widgetUpdateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
sendBroadcast(widgetUpdateIntent);
3)您不需要显式打开应用程序(实际上是无法做到的),如果您将更新周期设置为30分钟,则会收到onUpdate
回调,并且您也需要从那里启动服务。
4)当动作与您的自定义动作( ApplicationEvents.DATA_FETCHED
)相匹配时,您将在onReceive
事件中更新UI。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.