android - 从未调用过 OnUpdate - Android Widget

标签 android android-widget

我一直在关注各种小部件教程,例如 this onethis one

我试过根据我的目的调整他们的代码,我也试过直接复制粘贴。 似乎无论我做什么,我的小部件都不会更新。当它被放置在主屏幕上时,文本保持为创建它时使用的静态文本。 我需要这个应用程序做的就是更新将包含在布局中的 4 个 TextView。

下面的代码大部分是从其中一个教程中复制的。我试过调试 onUpdate 方法,但断点似乎从未被击中。

如有任何帮助,我们将不胜感激。

编辑:我恢复到我之前尝试过的这个小部件的一个更简单的版本,并将下面的代码替换为更简单的小部件的代码。我对我的 list 进行了 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);
}

}

我的 list :

<?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 Provider 信息:

<?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">

最佳答案

您的 list 有误。你声称你有一个 network.widget.AppWidgetProvider类,AFAIK,你不知道。你有一个奇怪的名字 network.widget.NetworkWidgetActivity类(class)。你需要在你的 <receiver> 中使用 that元素。

还有:

  • 替换this.getApplicationContext()getApplicationContext()this

  • 除非您打算在服务中做更重要的工作(数据库 I/O、网络 I/O 等),否则请考虑将所有逻辑移至 onUpdate() 中。并摆脱这项服务,因为它在这里并没有真正给你带来太多好处(如果你打算保留该服务,请切换到 IntentService 并摆脱 stopSelf() 因为这是为你)

  • 当您要求 10 秒更新时,最小有效 updatePeriodMillis是 30 分钟——调试时请牢记这一点

  • int[] widgetId似乎在NetworkWidgetActivity 中未被使用

  • onStart()Service已被弃用几年;使用 onStartCommand()相反

关于android - 从未调用过 OnUpdate - Android Widget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9744198/

相关文章:

android - 模拟器在 Android Studio 上打开并消失

android - 如何将屏幕上的按钮水平和垂直居中加上等距?

Android 小部件通过服务更新,即执行 http 请求

java - 如何简化 Android 小部件中 View 的设置值

java - 如何使用 ExpandableListView 创建小部件?

Android NSD 未发现所有服务

java - 为什么 Twitter 应用程序不共享动画 gif?

java - MySQL查询抛出异常,而不是一个空的ResultSet

android - Android App Widget 中按钮单击无法启动服务

android - 在锁定屏幕 android 上显示应用程序小部件