Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(android)添加一个小部件_Android_Android Appwidget - Fatal编程技术网

(android)添加一个小部件

(android)添加一个小部件,android,android-appwidget,Android,Android Appwidget,我已经创建了这个小部件 public class Widget extends AppWidgetProvider{ private SimpleDateFormat formatter = new SimpleDateFormat ( "EEEEEEEEE\nd MMM yyyy"); public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { S

我已经创建了这个小部件

public class Widget extends AppWidgetProvider{
private SimpleDateFormat formatter = new SimpleDateFormat (
    "EEEEEEEEE\nd 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);

    }
}
它只是显示日期,但我不知道如何将这个类添加到我的主程序中,最后在主屏幕上显示这个小部件。你能帮我吗?

这里有一个类似的小部件,它给圣诞节留出了几天时间。你可以根据需要定制它


当用户从窗口小部件列表中选择它时,窗口小部件将显示出来。所以我认为,你只需要担心小部件将显示的数据。rest将取决于用户是否将该小部件保留在主屏幕上。

小部件基本上是一个广播接收器。如果您已经有一个应用程序,那么将这个小部件(广播接收器)添加到它的清单文件中

这里有一个链接-

Days Left Widget##公共类WidgetProvider扩展了AppWidgetProvider{
private PendingIntent报警意图;
私有最终长alarmInterval=AlarmManager.INTERVAL\u HOUR;
公共最终字符串刷新\u ACTION=“DAYSLEFT\u小部件\u刷新”;
@凌驾
公共void onReceive(上下文、意图){
super.onReceive(上下文、意图);
if(REFRESH_ACTION.equals(intent.getAction())){
updateAllWidgets(上下文);
}
}
@凌驾
public void onUpdate(上下文上下文、AppWidgetManager、widgetManager、,
int[]id){
updateAllWidgets(上下文、widgetManager、ID);
设置报警(上下文);
}
@凌驾
已禁用公共无效(上下文){
拆卸报警(上下文);
}
公共静态void updateAppWidget(上下文,
AppWidgetManager(AppWidgetManager,int-widgetId){
新的WidgetRefresh(上下文,appWidgetManager).refresh(widgetId);
}
私有void updateAllWidgets(上下文){
AppWidgetManager=AppWidgetManager.getInstance(上下文);
最后一个字符串className=WidgetProvider.class.getName();
ComponentName ComponentName=新的ComponentName(
context.getPackageName(),className);
final int[]widgetIds=widgetManager.getAppWidgetIds(组件名);
updateAllWidgets(上下文、widgetManager、WidgetId);
}
私有void updateAllWidgets(上下文,
AppWidgetManager widgetManager,最终整数[]ID){
WidgetRefresh刷新器=新的WidgetRefresh(上下文,widgetManager);
for(int i=0;i
}

我读过,但找不到路。你有创建小部件的教程吗?我可以创建创建小部件的类,但我不能从主程序调用它来添加小部件并在主屏幕上显示它:/n这是创建小部件(显示剩余天数)的最简单示例。我想,你不知道如何在主屏幕上显示小部件…如果是这样,那么长时间点击主屏幕>小部件>选择你的应用程序名称(例如:它会在这里-“圣诞节剩下的日子”)。它会显示小部件。您需要了解有关widget的更多信息。请参阅
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);
    }
}