Android Widget与其他应用程序不同

Android Widget与其他应用程序不同,android,android-widget,Android,Android Widget,我可能在做一些愚蠢的事情,但我的应用程序小部件有一个有趣的问题。不时地,通常在添加到主屏幕后,它会从另一个应用程序转换成一个小部件。此小部件在特定手机上始终相同,但在不同手机上有所不同。几秒钟后,小部件返回到它应该是什么样子。虽然对我来说这不是一个问题,因为这只是一个暂时的问题,但我收到了一些用户的电子邮件,他们说这个小部件被永久地卡在了另一种形式中 以下是可能相关的任何文件: 很抱歉附上这么多,但我真的不知道从哪里开始。我希望对更熟悉api的人来说,问题会立即显现出来。我也为任何

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

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


很抱歉附上这么多,但我真的不知道从哪里开始。我希望对更熟悉api的人来说,问题会立即显现出来。我也为任何糟糕的代码表示歉意,因为这是我第一个严肃的项目,只是我的业余爱好和功课。

我在我的小部件中遇到了与您描述的完全相同的问题,并且搜索了很多次以寻找解决方案,但没有找到任何解决方案。我最后做的是某种变通办法,在我的情况下似乎很有效。我所做的是,我没有直接从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);
    }
}
请注意,为什么这种解决方法可以解决这个问题,但好的一面是它确实解决了这个问题
希望这有帮助

包含您的AndroidManifest.xml怎么样?我的第一个怀疑是你的软件包名称或注册意图有问题。除此之外:库存,一些供应商ROM或定制的?库存我指的是香草安卓。愚蠢的我,我已经添加了舱单。这个问题发生在股票模拟器上,也发生在我手机上的HTC sense和cyanogen上。我不能代表别人说话。