我一直在关注各种Widget教程,例如this one和this one
我已尝试将其代码调整到我的目的,我尝试了直接复制粘贴。 似乎无论我做什么,我的小部件都不会更新。当它放在主屏幕上时,文本将保留为创建它的静态文本。 我需要这个应用程序才能更新4个TextViews,它将包含在布局中。
以下代码主要是从其中一个教程中复制而来。我已经尝试调试onUpdate方法,但是断点似乎永远不会被击中。
任何帮助都会非常感激。
编辑:我恢复了这个小部件的一个更简单的版本,我之前尝试过这个版本,并用更简单的小部件代码替换下面的代码。我将CommonsWare建议的更改发送到我的清单。不幸的是问题仍然存在。我的主要.java文件如下所示:
public class NetStatWidget extends AppWidgetProvider
{
public void onUpdate(Context context, AppWidgetManager manager, int[] appWidgetIds)
{
ComponentName thisWidget = new ComponentName(context, NetStatWidget.class);
int[] widgetId = manager.getAppWidgetIds(thisWidget);
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.appwidget);
remoteView.setTextViewText(R.id.textView0, "Hello");
manager.updateAppWidget(widgetId, remoteView);
}
}
我的宣言:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.stat"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver android:name="NetStatWidget" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/providerinfo" />
</receiver>
</application>
</manifest>
我的Widget提供商信息:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/main"
android:minWidth="146dip"
android:minHeight="72dip"
android:updatePeriodMillis="10000">
答案 0 :(得分:7)
你的清单错了。您声称自己拥有network.widget.AppWidgetProvider
课程,而AFAIK则没有。你有一个奇怪的network.widget.NetworkWidgetActivity
类。您需要在<receiver>
元素中使用 。
此外:
将this.getApplicationContext()
和getApplicationContext()
替换为this
除非您计划在服务中做更认真的工作(数据库I / O,网络I / O等),否则请考虑将所有逻辑移到onUpdate()
并删除服务,因为它并不是真的在这里买得太多(如果你 要保留服务,请切换到IntentService
并摆脱stopSelf()
,因为那是为你处理的)
当您要求进行10秒更新时,最低有效期updatePeriodMillis
为30分钟 - 在调试时请记住这一点
int[] widgetId
似乎在NetworkWidgetActivity
onStart()
Service
已被弃用了几年;使用onStartCommand()
代替