Articles of android appwidget

使用RemoteViews设置化合物可绘制

我有一个带有textview和imageview的appwidget布局。 林特总是告诉我用复合textviewreplace它。 问题是,如何使用RemoteViews调用setCompoundDrawables? 可能吗? 谢谢。 更新: http : //code.google.com/p/android/issues/detail? id= 29249

android appwidget listview不更新

我写了一个AppWidget,它显示ContentProvider的一个ListView中的一些数据,但是我更新时遇到了麻烦。 当我第一次创build小部件时,它会正确填充,但在AlarmManager的PendingIntent到达后,ListView上不会发生更新。 代码如下: Intent update = new Intent(context, MenuWidgetProvider.class); update.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); update.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); PendingIntent pIUpdate = PendingIntent.getBroadcast(context, 0, update, 0); ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)). set(AlarmManager.RTC, nextTime.toMillis(false), pIUpdate); Log.d(TAG, "updating: " + dmt.mealName); for (int i = 0; i < appWidgetIds.length; ++i) { int widgetId = appWidgetIds[i]; RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_menu); // meal name views.setTextViewText(R.id.widget_locname, prefs.getString(PREF_WIDGET_LOCNAME, "")); […]

如何获取应用部件大小?

我有一个Android应用程序小部件,我想扩展它来支持几种尺寸,也可以用Honeycomb重新定义大小。 问题是我需要知道小部件的大小,所以我可以知道我可以放入多less内容。 我如何阅读应用程序的小部件大小? 我找不到任何东西。

如何获取已安装的小部件列表?

我正在尝试阅读Android上可用的主屏幕小部件列表。 我可以使用可用的应用程序列表填充网格 Intent myIntent = new Intent(Intent.ACTION_MAIN, null); myIntent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> appsInfo = MyActivity.getPackageManager().queryIntentActivities(myIntent, 0); 并遍历每个ResolveInfo。 我怎样才能做到这一点与可用的主屏幕小部件? 我想用与出现的列表相同的列表来填充网格,不断地触摸屏幕并从出现的popup窗口中select“小部件”。

使用appWidgetId检查主屏幕上是否存在小部件

我正在使用AlarmManager更新我的小部件。 如果主屏幕上没有小部件,我想停止它。 但是我在检测主屏幕上是否有小部件时遇到问题。 正如每当我尝试使用这种方式获取AppWidgetIds: AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); int[] appWidgetIDs = appWidgetManager .getAppWidgetIds(new ComponentName(context, Widget.class)); 我得到了一段appWidgetIDs而实际上在主屏幕上没有任何部件。 为什么? 因此,我想知道是否有一种方法来检测到主屏幕上存在一个小部件ID。 谢谢你。

UpdateAppWidget空指针exception

以下是更新appwidget的静态方法: public static void updateAppWidget(Context context, int id, WALL_POST_DETAILS post){ try{ System.out.println("In updateAppWidget==>"+id); AppWidgetManager mngr=AppWidgetManager.getInstance(context); String diff=diff(post.created_time.trim()); RemoteViews views=new RemoteViews(context.getPackageName(),R.layout.widget_layout); PendingIntent pending=PendingIntent.getActivity(context, 0, new Intent(context,ShareDialogActivity.class), 0); views.setOnClickPendingIntent(R.id.TextView01, pending); views.setOnClickPendingIntent(R.id.Button03, pending); views.setTextViewText(R.id.actor_name, post.actor_name); views.setTextViewText(R.id.actor_message, post.message); views.setImageViewBitmap(R.id.actor_photo, post.image); views.setTextViewText(R.id.created_time, diff); if(post.no_of_comments>0){ views.setViewVisibility(R.id.comments_image, View.VISIBLE); views.setViewVisibility(R.id.comment_word, View.VISIBLE); views.setTextViewText(R.id.no_of_comments, String.valueOf(post.no_of_comments)); views.setViewVisibility(R.id.no_of_comments, View.VISIBLE); System.out.println("No. of Comments==>"+post.no_of_comments); }else{ views.setViewVisibility(R.id.comments_image, View.INVISIBLE); views.setViewVisibility(R.id.comment_word, View.INVISIBLE); […]

用于更新小部件的AsyncTask – 如何访问onPostExecute()中的textviews?

以下情况: 我有一个app widget ,从一个url轮询数据,并更新与parsed html小部件。 在pre-honeycomb设备上,这可以通过service来完成,而不使用单独的线程。 现在,在ICS上,这已经改变,并且需要一个ASyncThread 。 访问我使用的Widget-Updater-Service的TextViews RemoteViews remoteViews = new RemoteViews(getApplicationContext().getPackageName(), R.layout.widget_layout); remoteViews.setTextViewText(R.id.TextView1,"test"); 但是这在ASyncThread似乎不起作用。 难道呢,主线服务已经被终止,当线程正在尝试改变textview ? 任何想法解决这个问题?

Android AppWidgetManager方法updateAppWidget无法设置意图,加载数据。 它随机发生

我的小部件由2个button和一个显示数据的列表视图组成。 大多数情况下,当widget提供者的onUpdate方法被调用时,一切都会正常加载,每个人都很高兴。 不过,我有时会注意到更新方法被调用后,小部件完全无法加载其数据。 列表视图是空的,所有的button都是不响应的。 就好像我把布局初始化到了小部件中,但是没有任何挂起的意图和适配器列表被设置。 我logging了一切,发现情况并非如此。 挂起的意图和列表适配器一样,每次都会被创build,包括失败的随机时间。 很长时间以来,我认为这与列表数据如何填充到适配器中有关,但每次看到它都工作,加上button意图不工作的事实导致我相信方法updateAppWidget (ComponentName,RemoteViews)是失败的。 但是,没有错误堆栈来帮助我确认这一点。 下面是在AppWidgetProvider的onUpdate方法调用的单独服务中运行的代码: @SuppressWarnings("deprecation") private void updateWidget(int[] ids) { AppWidgetManager widgetManager = AppWidgetManager.getInstance(this); int[] widgetIds = widgetManager.getAppWidgetIds(new ComponentName(this, WidgetReceiver.class)); for (int currentWidgetId : widgetIds) { RemoteViews widget = new RemoteViews(this.getPackageName(), R.layout.widget_layout); Intent intent = new Intent(this, WidgetService.class); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, currentWidgetId); intent.putExtra("random", randomNumber); randomNumber++; intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); widget.setRemoteAdapter(currentWidgetId, android.R.id.list, intent); Intent […]

android appwidget不会从活动更新

我有一个简单的appwidget,我想更新它当一个活动发生在一个活动(在同一个应用程序)。 在onUpdate(),我立即更新小部件,这工作正常。 在我的活动中,我调用了在onUpdate()中调用的appwidget中的静态更新方法来更新视图。 小部件不会更新。 我可以将代码直接追踪到AppWidgetManager.updateAppWidget()方法中,所有这一切都很好,但小部件不会更新。 唯一可能的区别是我可以看到的是,传递到我的静态更新方法的上下文对象是不同的,当它从一个活动的上下文与appwidget的onUpdate()方法的上下文调用。 然而,网上有很多的例子,所以我希望它能工作。

如何从Android的AppWidget中获取正确的DisplayMetrics?

我需要在Android AppWidget中确定运行时的屏幕密度。 我build立了一个HDPI模拟器(avd)。 如果设置了一个常规的可执行项目,并将这些代码插入到onCreate方法中: DisplayMetrics dm = getResources().getDisplayMetrics(); Log.d("MyTag", "screen density " + dm.densityDpi); 如预期的那样输出“屏幕密度240”。 但是,如果我设置一个AppWidget项目,并将此代码插入onUpdate方法: DisplayMetrics dm = context.getResources().getDisplayMetrics(); Log.d("MyTag", "screen density " + dm.densityDpi); 这输出“屏幕密度160”。 我注意到,连接debugging器,这里的Resources对象的mDefaultDisplay成员在AppWidget的情况下是null。 同样,如果我在运行时使用从AppWidget中的context.getResources()获得的Resources对象获取资源,它将根据屏幕密度返回错误的资源。 例如,我有一个60x60px可绘制的MDI和一个80×80可绘制的HDI。 如果我使用context.getResources()。getDrawable(…)得到这个Drawable对象,它将返回60×60版本。 有什么方法可以从AppWidget的上下文正确处理运行时的资源? 谢谢!