窗口小部件与另一个应用程序成为不同的窗口

时间:2011-09-01 20:16:37

标签: android android-widget

我可能会做一些愚蠢的事情,但我的app小部件有一个有趣的问题。经常在添加到主屏幕之后,它会不时地从另一个应用程序转换为小部件。此小组件在特定手机上始终相同,但在不同手机之间有所不同。几秒钟后,小部件然后返回它应该看起来的样子。虽然对我来说这不是一个问题,因为它只是一个暂时性的问题,但我收到了来自用户的电子邮件,他们说这个小部件永远停留在另一种形式。

以下是可能相关的任何文件:

我很抱歉这么多,但我真的不知道从哪里开始。我希望对那些更熟悉api的人来说,这个问题会立即显现出来。我也为任何可怜的代码道歉,因为这是我的第一个认真的项目,并且只是与学业一起的爱好。

1 个答案:

答案 0 :(得分:2)

我在我的小部件中遇到了完全相同的问题,因为您描述并搜索了很多解决方案,但找不到任何问题。我最终做的是某种解决方法似乎在我的情况下工作正常。我做的是以下,而不是直接从onUpdate()方法更新小部件,我启动了一个处理更新然后自杀的服务。这解决了它在模拟器和更新期间卡住小部件的设备上的问题。 这是一个示例代码:

AppWidgetProvider:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    context.startService(new Intent(context, WidgetService.class));
}

服务:

@Override
public void onStart(Intent intent, int startId) {
    started(intent);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    started(intent);
    return START_STICKY;
}


private void started(Intent intent) {
    //update here the widgets
    Context context = getApplicationContext();
    updateWidgets(context);
    stopSelf();//killing the service
}

private void updateWidgets(Context context) {
    AppWidgetManager appmanager = AppWidgetManager.getInstance(context);
    ComponentName cmpName = new ComponentName(context, widgetClass);
    int[] widgetIds = appmanager.getAppWidgetIds(cmpName);
    RemoteViews rView = new RemoteViews(context.getPackageName(), layoutId);
    for (int wid : widgetIds) {
        //all updates here
        rView.setTextViewText(tvId, desc);
        appmanager.updateAppWidget(wid, rView);
    }
}

请注意为什么这种解决方法可以解决问题,但好处是它确实存在 希望这有帮助