2011-09-01 85 views
0

我可能在做一些愚蠢的事情,但我的应用程序小工具有一个有趣的问题。经常被添加到主屏幕后,它会转换成另一个应用程序的小部件。这个小部件在特定的手机上总是相同的,但手机之间不同。几秒钟后,小部件会返回到它应该看起来的样子。虽然对我来说这不是一个问题,因为它只是一个暂时的问题,我有来自用户的电子邮件,他们说这个小部件永久卡在另一个表单中。小工具将成为与其他应用程序不同的小工具

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

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

+1

如何包含您的AndroidManifest.xml?我的第一个怀疑是你的包名或意向注册或某事有问题。 – fluffy

+0

此外:股票,一些供应商ROM或自定义的? – 2011-09-01 20:25:11

+0

而我股票的意思是香草android。愚蠢的我。 – 2011-09-01 20:41:31

回答

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); 
    } 
} 

注知道为什么这个解决方案解决了问题,但好处是,它 希望这帮助