Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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
Java 为什么';API 3或API 4中是否有我的应用程序小部件更新?_Java_Android_Android Widget_Android Appwidget - Fatal编程技术网

Java 为什么';API 3或API 4中是否有我的应用程序小部件更新?

Java 为什么';API 3或API 4中是否有我的应用程序小部件更新?,java,android,android-widget,android-appwidget,Java,Android,Android Widget,Android Appwidget,我正在开发一个android小部件,它在API级别5或更高的环境下工作得非常好。它在API级别1或2中根本不受支持。在3和4中,它应该工作得非常好,但是由于某些原因,小部件没有更新 onUpdate方法被调用并执行,没有错误;但是,在3和4中,它不会更改小部件的文本。我几乎不知所措。有什么想法吗 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds

我正在开发一个android小部件,它在API级别5或更高的环境下工作得非常好。它在API级别1或2中根本不受支持。在3和4中,它应该工作得非常好,但是由于某些原因,小部件没有更新

onUpdate方法被调用并执行,没有错误;但是,在3和4中,它不会更改小部件的文本。我几乎不知所措。有什么想法吗

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);

    DataAccess helper = new DataAccess(context);
    String text = helper.getCurrentText();
    helper.close();

    if (text != null)
        views.setTextViewText(R.id.widget_text, text);

    Intent intent = new Intent(context, WidgetDetailsActivity.class);
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
    views.setOnClickPendingIntent(R.id.widget, pending);

    appWidgetManager.updateAppWidget(appWidgetIds, views);
}
试试这个:

在更新方法的末尾,您需要调用super

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);

    DataAccess helper = new DataAccess(context);
    String text = helper.getCurrentText();
    helper.close();

    if (text != null)
        views.setTextViewText(R.id.widget_text, text);

    Intent intent = new Intent(context, WidgetDetailsActivity.class);
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0);
    views.setOnClickPendingIntent(R.id.widget, pending);

    appWidgetManager.updateAppWidget(appWidgetIds, views);

   super.onUpdate(context, appWidgetManager, appWidgetIds);
}

您需要在更新方法上启动服务,并将所有代码也投入服务,这里我给出了onReceive和服务演示
context.startService(新意图(context,UpdateService.class))


其中buildUpdate是小部件更新代码的方法

您调试过小部件吗?你得到了预期的文本吗?悬而未决的意图有效吗?onUpdate执行了吗?是的,我附加了调试器,除了文本更改之外,其他一切都正常工作。我可以改变颜色、大小、行为等等,但我不能改变文本。我已经很长时间没有在1.5或1.6中尝试过了,因为那个版本越来越过时了。奇怪。我有一个适用于1.5+的小部件,在更新文本方面没有任何问题。尝试添加一些日志,看看发生了什么。调试器可能会使用小部件进行欺骗。它应该可以在1.5+上正常工作。你多久更新一次?我收回我以前的评论。似乎没有对小部件执行任何远程视图命令。没有错误或日志语句。它只是失败了。我在修改首选项时更新命令,然后每隔几个小时更新一次。我可能会组合一个快速测试小部件,看看是否可以去掉一些混淆的变量。我试过这个。还是不走运。它似乎根本不执行远程视图。
public static class UpdateService extends Service {
    @Override
    public void onStart(Intent intent, int startId) {
        // Build the widget update for today
        RemoteViews updateViews = buildUpdate(this);
        // Push update for this widget to the home screen
        ComponentName thisWidget = new ComponentName(this,
                Widget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(thisWidget, updateViews);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

@Override
public void onReceive(Context context, Intent intent) {
    final RemoteViews remoteViews  = buildUpdate(context);
    ComponentName cn = new ComponentName(context, Widget.class);
    AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteViews);
    super.onReceive(context, intent);
}