#android #android-appwidget
#Android #android-appwidget
Вопрос:
Ну, я создал этот виджет
public class Widget extends AppWidgetProvider{
private SimpleDateFormat formatter = new SimpleDateFormat (
"EEEEEEEEEnd MMM yyyy");
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
String now = formatter.format(new Date());
RemoteViews updateViews = new RemoteViews (
context.getPackageName() , R.layout.widget );
updateViews.setTextViewText(R.id.text, now);
appWidgetManager.updateAppWidget(appWidgetIds, updateViews);
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
Он просто показывает дату, но я не знаю, как добавить этот класс в мою основную программу и, наконец, показать виджет на главном экране. Вы можете мне помочь?
Ответ №1:
Вот ссылка на аналогичный виджет, который дает дни, оставшиеся до Рождества. вы можете настроить его в соответствии с вашими потребностями.
И виджет будет отображаться, когда пользователь выберет его из списков виджетов. Поэтому я думаю, вам просто нужно беспокоиться о данных, которые будет отображать виджет.rest будет зависеть от пользователя, сохранять ли этот виджет на рабочем столе или нет.
Комментарии:
1. я прочитал это, но не могу найти свой путь. У вас есть какой-нибудь учебник по созданию виджетов? Я могу создать класс, который создает виджет, но я не могу вызвать его из своей основной программы, чтобы добавить виджет и показать его на главном экране :/
2. Это самый простой пример создания виджета (который отображает оставшиеся дни). Я думаю, вы не знаете, как отобразить виджет на рабочем столе … если да, то долго нажимайте на рабочий стол> виджеты> выберите название вашего приложения (например: оно будет там для этого — «дни, оставшиеся до Рождества»). он покажет вам виджет. вам нужно узнать больше о виджете. пожалуйста, обратитесь helloandroid.com/files/xmaswidget/android_howto-hellowidget.pdf
Ответ №2:
Виджет — это, по сути, широковещательный приемник. если у вас уже есть приложение, добавьте этот виджет (широковещательный приемник) в его файл манифеста.
Вот ссылка — http://developer.android.com/guide/topics/appwidgets/index.html
Ответ №3:
Осталось дней Виджет ## общедоступный класс WidgetProvider расширяет AppWidgetProvider {
private PendingIntent alarmIntent;
private final long alarmInterval = AlarmManager.INTERVAL_HOUR;
public final String REFRESH_ACTION = "DAYSLEFT_WIDGET_REFRESH";
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (REFRESH_ACTION.equals(intent.getAction())) {
updateAllWidgets(context);
}
}
@Override
public void onUpdate(Context context, AppWidgetManager widgetManager,
int[] ids) {
updateAllWidgets(context, widgetManager, ids);
setupAlarm(context);
}
@Override
public void onDisabled(Context context) {
teardownAlarm(context);
}
public static void updateAppWidget(Context context,
AppWidgetManager appWidgetManager, int widgetId) {
new WidgetRefresher(context, appWidgetManager).refresh(widgetId);
}
private void updateAllWidgets(Context context) {
AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
final String className = WidgetProvider.class.getName();
ComponentName componentName = new ComponentName(
context.getPackageName(), className);
final int[] widgetIds = widgetManager.getAppWidgetIds(componentName);
updateAllWidgets(context, widgetManager, widgetIds);
}
private void updateAllWidgets(Context context,
AppWidgetManager widgetManager, final int[] ids) {
WidgetRefresher refresher = new WidgetRefresher(context, widgetManager);
for (int i = 0; i < ids.length; i ) {
refresher.refresh(ids[i]);
}
}
private void setupAlarm(Context context) {
if (alarmIntent == null) {
final Intent intent = new Intent(REFRESH_ACTION);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
final AlarmManager alarms = getAlarmManager(context);
alarms.setInexactRepeating(AlarmManager.RTC, new Date().getTime(),
alarmInterval, alarmIntent);
}
}
private void teardownAlarm(Context context) {
if (alarmIntent != null) {
getAlarmManager(context).cancel(alarmIntent);
}
}
private final AlarmManager getAlarmManager(Context context) {
return (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
}
private static class WidgetRefresher {
Context context;
AppWidgetManager appWidgetManager;
public WidgetRefresher(Context context,
AppWidgetManager appWidgetManager) {
this.context = context;
this.appWidgetManager = appWidgetManager;
}
public void refresh(int widgetId) {
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.widget);
WidgetConfiguration config = getConfig(widgetId);
SimpleDate eventDate = config.getSimpleDate();
if (eventDate != null) {
updateTextWithDate(views, eventDate);
} else {
updateTextWithoutDate(views);
}
updateTitle(views, config.getTitle());
setupClickIntent(views, widgetId);
appWidgetManager.updateAppWidget(widgetId, views);
}
private void updateTextWithDate(RemoteViews views, SimpleDate date) {
String daysLeft = Integer.toString(date.getDaysLeft());
views.setTextViewText(R.id.eventDate, date.toString());
views.setTextViewText(R.id.daysLeft, daysLeft);
}
private void updateTextWithoutDate(RemoteViews views) {
views.setTextViewText(R.id.eventDate, "");
views.setTextViewText(R.id.daysLeft, "");
}
private void updateTitle(RemoteViews views, String title) {
if (title == null) {
title = context.getString(R.string.no_title);
}
views.setTextViewText(R.id.eventTitle, title);
}
private WidgetConfiguration getConfig(int widgetId) {
return new WidgetConfiguration(context, widgetId);
}
private void setupClickIntent(RemoteViews views, int widgetId) {
Intent intent = new Intent(context, ConfigureActivity.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context,
widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.eventTitle, pendingIntent);
}
}
}
https://play.google.com/store/apps/details?id=com.Free.daysleft