【发布时间】:2013-12-16 06:21:45
【问题描述】:
我正在使用 vogella 教程为我的应用程序构建一个小部件。我有一个疑问。 每当用户第一次打开我的小部件时,我的代码将调用一个异步,它将从网络检索数据,并在 postExecute 中将更新数据显示到小部件中{这工作正常} 在每个指定的更新间隔之后,自动调用 OnUpdate 并再次调用异步并显示新数据。如果在更新时没有可用的互联网,它将使用以前的数据并且小部件在这种情况下也是一致的。
但如果在小部件启动时没有互联网连接[即当第一次调用小部件时],那么在下一个更新间隔之前,该会话不会显示任何数据 [在此小部件中为 30 分钟]
我添加了一个网络监听器,它工作正常。 但我无法从网络监听器的 onReceive() 调用 onUpdate 函数。 如何强制调用小部件的 onUpdate 函数,静态引用在这个 cade 中不起作用。 请帮忙! {对于这么大的文字问题感到抱歉}
>网络监听类代码更新
public class NetworkListener extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (activeNetInfo != null || mobNetInfo != null) {
if (!getUpdateComplete(context)) {
Log.d("NetworkListener", "IsInterruptedDueToNetwork=true");
RemoteViews remoteViews = new RemoteViews(
context.getPackageName(), R.layout.widget_layout);
ComponentName watchWidget = new ComponentName(context,
MyWidgetProvider.class);
(AppWidgetManager.getInstance(context)).updateAppWidget(
watchWidget, remoteViews);
}
} else {
Toast.makeText(context, "Network Not Available", Toast.LENGTH_SHORT)
.show();
}
}
public boolean getUpdateComplete(Context mContext) {
Log.d("getUpdateComplete", "getUpdateComplete");
SharedPreferences myPref = mContext.getSharedPreferences("Widget",
Context.MODE_PRIVATE);
return myPref.getBoolean("IsUpdateComplete", false);
}
}
但上面的代码仍然没有调用 onUpdate 方法。 我的代码哪里错了!
【问题讨论】:
-
你的广播正常吗
-
你怎么叫这个广播
-
我已经在 Manifest 中设置了。每当网络状态发生变化时,它都应该被调用! {它工作正常},但 updataeAppWidget 永远不会被调用
-
在 OnRecieve 中更新你的小部件的逻辑在哪里......你不明白我在说什么
-
不,代码在 AppWidgetProvider 的 onUpdate 里面。我在这个方法中调用了另一个异步!