2011-01-23 62 views
0

我有一个小部件与我的应用程序一起工作。当应用程序首次启动时,我保留上下文和值,以便在事情发生变化时从应用程序调用UpdateWidget()。但是如果应用程序不知道上下文和AppID是什么,我不知道如何获取该信息。我认为我试图做到这一点的方式是错误的,但不知道还有什么要尝试。如何更新应用程序开始的小部件

所以基本上这个小部件已经在桌面上了。我启动了应用程序并进行了一些更改,我需要使用新信息向应用程序发送更新。

我原以为应用程序在启动时会获得与该小部件的连接,但并非如此。

@Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     Toast.makeText(context, "onUpdate", Toast.LENGTH_SHORT).show(); 

     Ct = context; 
     ApMgr = appWidgetManager; 
     WidgetID = appWidgetIds; 

     WidgetOn = true; 

     UpdateWidget(); 

    } 

回答

1

当应用程序第一次启动时我把上下文

除非它是应用程序上下文,正在泄漏内存。请不要泄漏记忆。

和价值观,所以我可以从应用程序调用我的UpdateWidget()时,事情改变

任何地方,你的应用,在那里你可能需要更新部件,你已经有了一个Context。例如:

但是,如果应用程序不知道上下文和AppID是什么,我不知道如何获取该信息。

你绝对知道“上下文是什么”。这是你的Activity。或者,如果有问题的代码位于您的自定义Application对象中,则“上下文”为Application

关于应用部件ID,将其存储在一个文件中。或者一个数据库。只需确保在卸载应用程序小部件时进行清理。或者,如果您不支持多个应用程序小部件,则只需完全跳过应用程序小部件ID,然后使用不包含应用程序小部件ID数组的updateAppWidget()方法。

+0

谢谢您的信息!如果我不使用该ID,那么它需要一个组件名称。我不知道组件名称是什么...对不起,我是这个新手。 appWidgetManager.updateAppWidget(为widgetid,remoteViews);我要输入什么来代替WidgetID? – 2011-01-24 02:08:40

0

我从CommonsWare的帮助和线索中发现了这一点。我试图做的是确保应用程序可以在应用程序数据库发生更改时向widget发送更新。任何时候都不需要更新小部件。当应用程序从重新启动或新版本断开连接时,该链接被切断。下面的这个小函数再次获取“链接”。再次感谢Stackoverflow和CommonsWare!我希望我正确地做到了这一点,它确实符合我的要求。

public static void UpdateWidget(Context Ct) 
{ 

     ComponentName Me =new ComponentName(Ct, Widget.class); 

     remoteViews=new RemoteViews(Ct.getPackageName(), R.layout.widget); 

     AppWidgetManager ApMgr=AppWidgetManager.getInstance(Ct); 

     DisplayTop(Ct); // This gets the data from the DB and updates the remote view 

     ApMgr.updateAppWidget(Me, remoteViews); 

} 
0

我这样做我的AppWidget没有传递AppWidget ID,它工作正常。

Context context = getApplicationContext(); 
context.startService(new Intent(context, UpdateService.class)); 

,或者如果你知道背景,你可以做这样的事情 -

startService(new Intent(myClass.this, UpdateService.class)); 

这两部作品!

0

它完全没有问题地工作。你只能使用;

int[] ids = AppWidgetManager.getInstance(Context.getApplication()).getAppWidgetIds(new ComponentName(Context.getApplication(), Widget.class)); 
        Widget myWidget = new Widget(); 
        myWidget.onUpdate(Context, AppWidgetManager.getInstance(Context),ids);