强制 Android 小部件更新

Posted

技术标签:

【中文标题】强制 Android 小部件更新【英文标题】:Forcing An Android Widget to Update 【发布时间】:2012-12-27 05:34:22 【问题描述】:

我一直在不懈地尝试通过按下小部件上的按钮来更新我的小部件。该小部件显示当前剩余 RAM、CPU 级别和电池电量。

确定这些值的代码运行良好。当我按下按钮时,我无法让它更新。这些方法我都试过了:

Force android widget to update - 两种方法都显示

Android: How do I force the update of all widgets of a particular kind

Clickable widgets in android

还有一个报警管理器

他们都没有工作。

我的小部件布局的 XML:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_  
    android:layout_
    android:padding="10dp"
    android:background="@drawable/widgetbg">

        <TextView android:id="@+id/widgetCPU"
            android:layout_weight="1"
            android:layout_
            android:layout_
            android:text="@string/derp"   
            android:textSize="14sp"
            android:typeface="sans"
            android:textColor="@android:color/holo_blue_bright"
            android:gravity="center"/>

        <TextView android:id="@+id/widgetRam"
            android:layout_weight="1"
            android:layout_
            android:layout_
            android:text="@string/derp"   
            android:textSize="14sp"
            android:typeface="sans"
            android:textColor="@android:color/holo_blue_bright"
            android:gravity="center"/>

        <TextView android:id="@+id/widgetBat"
            android:layout_weight="1"
            android:layout_
            android:layout_
            android:text="@string/derp"   
            android:textSize="14sp"
            android:typeface="sans"
            android:textColor="@android:color/holo_blue_bright"
            android:gravity="center"/>
        <Button android:id="@+id/widgetUpdate"
                android:layout_weight="1"
                    android:layout_
                    android:layout_
                    android:text="@string/button_send" />

    </LinearLayout>

当按下按钮时我想调用的方法:

    public class AppWidget extends AppwidgetProvider
    
    //...
         public void update(Context c, AppWidgetManager a)
          
          //...
         
    //...
    

按下按钮时如何调用更新方法?

【问题讨论】:

【参考方案1】:

注册一个监听器,例如在你的 onCreate() 方法中:

     findViewById(R.id.widgetUpdate).setOnClickListener(new OnClickListener() 

        @Override
        public void onClick(View v) 
                        update();
        
    );

【讨论】:

小部件有 onCreate() 吗? 没有,但它所在的活动。或者你在哪里膨胀布局? 我创建了一个服务来更新我的小部件,我使用 RemoteViews rvs = new RemoteViews(cn.getPackageName(), R.layout.widget_layout 行来膨胀它。 啊,没有注意到 AppWidget 部分。然后,您唯一的机会是将 PendingIntent 添加到整个小部件并在意图接收器中进行更新。 我在***.com/questions/2748613/… 中尝试了答案。无济于事。关于如何使其发挥作用的任何想法?【参考方案2】:

您可以将 onClickListener 添加到按钮,并从侦听器中调用更新方法。

查看This link 了解有关界面的更多信息

【讨论】:

以上是关于强制 Android 小部件更新的主要内容,如果未能解决你的问题,请参考以下文章

电池高效的 android 小部件,每分钟更新一次

如何在 leaveEvent 上强制更新小部件的样式?

Android 小部件不更新

android更新小部件外观

在 Android 中更新多个应用小部件

Android 应用小部件未更新