Android 从后台接收器更新的小部件
我是Android新手,所以每一件简单的事情都像一座山。Android 从后台接收器更新的小部件,android,android-widget,Android,Android Widget,我是Android新手,所以每一件简单的事情都像一座山。 我正在实现一个应用程序,它(带有一个后台接收器)可以接听电话并做一些事情:这很有效,好吧。 我试图添加一个显示某些状态的小部件(从接收器更新),但这不起作用,小部件没有更新 这是我的小部件的一部分:当它启动时,它会显示正确的状态 public class BlacklistWidget extends AppWidgetProvider { RemoteViews remote; ComponentName provid
我正在实现一个应用程序,它(带有一个后台接收器)可以接听电话并做一些事情:这很有效,好吧。
我试图添加一个显示某些状态的小部件(从接收器更新),但这不起作用,小部件没有更新 这是我的小部件的一部分:当它启动时,它会显示正确的状态
public class BlacklistWidget extends AppWidgetProvider {
RemoteViews remote;
ComponentName provider;
Context context;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
// create the remote view
remote = new RemoteViews(context.getPackageName(), R.layout.widget);
provider = new ComponentName(context, BlacklistWidget.class);
this.context = context;
Resources r = context.getResources();
String[] usage_arr = r.getStringArray(R.array.pref_usage_array);
int usage = Prefs.getUsage();
Utils.Log("Widget onUpdate: " + usage);
// remote.setImageViewResource(R.id.icon_usage,
remote.setTextViewText(R.id.usage, usage_arr[usage]);
appWidgetManager.updateAppWidget(provider, remote);
}
}
当receiver更改静态类的状态时,将调用此方法:
public static void setUsage(int usage) {
Usage = USAGE.values()[usage];
try {
Resources r = pcontext.getResources();
String[] usage_arr = r.getStringArray(R.array.pref_usage_array);
remoteViews.setTextViewText(R.id.usage, usage_arr[usage]);
Utils.Log("Widget updated with " + usage);
} catch (Exception e) {
e.printStackTrace();
}
}
如您所见,用于更新小部件的代码与小部件更新()中包含的代码相同。未引发异常,发送更新的文本正确。。但widget TextView保持不变 在清单中,小部件被定义为傻瓜:
<receiver android:name=".BlacklistWidget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/widget_info" />
</receiver>
我做错了什么?有没有更好的方法来实现我的目标?
非常感谢。您在
setUsage
中所做的不足以更新小部件:您必须在更新RemoteView
实例后调用updateAppWidget
。调用Utils.Log(“使用“+用法更新的小部件”)
您必须再次加载整个remoteview
实例,设置所有适当的属性(包括您实际要更新的文本视图),然后调用updateAppWidgetGet
非常感谢:添加appWidgetManager.updateAppWidgetGet(提供程序,远程视图)
在setUsage
的末尾完成工作!!!它在我的眼睛下,但我没有看到它。再次感谢