作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个小部件可以显示数据库中的一些信息。该小部件每隔一小时定期更新一次。但我也让用户通过单击小部件上的刷新按钮手动更新它。如何执行单击操作并刷新小部件?
注意:小部件使用服务来执行操作。
提前致谢。
最佳答案
我已经寻找了几个小时的答案,终于找到了答案。在您的 AppWidgetProvider 中,在 onUpdate 中循环您的小部件,并为每个小部件创建一个 Intent(向其添加小部件 ID 和一些数据以使其唯一,例如 intent uri),然后创建一个 PendingIntent 并将其分配给您要在其中创建点击监听器的 View 。
for(int i = 0; i<appWidgetIds.length; i++) {
Intent serviceIntent = new Intent(context, MyService.class);
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendingServiceIntent = PendingIntent.getService(context, 0, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setOnClickPendingIntent(R.id.refresh, pendingServiceIntent);
context.startService(serviceIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], views);
}
在我的特定情况下,我有两个点击监听器,一个用于刷新,一个用于启动设置 Activity ,因此如果您想启动一个 Activity ,只需使用 PendingIntent.getActivity 并添加 Intent.FLAG_ACTIVITY_NEW_TASK 标志。
两者结合:
for(int i = 0; i<appWidgetIds.length; i++) {
Intent serviceIntent = new Intent(context, MyService.class);
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendingServiceIntent = PendingIntent.getService(context, 0, serviceIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Intent settingsIntent = new Intent(context, SettingsActivity.class);
settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
settingsIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
settingsIntent.setData(Uri.parse(settingsIntent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent pendingSettingsIntent = PendingIntent.getActivity(context, 0, settingsIntent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setOnClickPendingIntent(R.id.title, pendingSettingsIntent);
views.setOnClickPendingIntent(R.id.refresh, pendingServiceIntent);
context.startService(serviceIntent);
appWidgetManager.updateAppWidget(appWidgetIds[i], views);
}
希望这会对某人有所帮助。 :)
关于单击按钮即可更新 Android 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3633605/
这实际上是我问的问题的一部分here ,该问题没有得到答复,最终被标记为重复。 问题:我只需使用 @Autowired 注释即可使用 JavaMailSender。我没有通过任何配置类公开它。 @Co
我是一名优秀的程序员,十分优秀!