当前位置: 首页 > 知识库问答 >
问题:

我的android homescreen小部件出现了,但没有更新

司徒良哲
2023-03-14

我已经发现了其他类似于我的问题,但找不到解决办法。我有一个带有简单TextView和配置Activity的自定义小部件。问题是:

>

  • 将小部件添加到homescreen时,会出现配置活动,但是一旦创建了配置活动,就会立即运行AppWidgetProvideronUpdate()方法。它应该在按确定按钮关闭配置活动后运行。

    即使onupdate()方法在配置活动启动时运行(根据方法中的Toast显示textview的正确数据),textview仍然没有更新。

    即使Android:UpdatePeriodMillis设置为1000ms,onUpdate方法也只运行一次--当配置活动开始时。

    当我将小部件添加到我的主页中,然后重启phone时,小部件的TextView最终会以适当的时间更新,但只更新一次。

    许多用户在最近的android版本(如4.4)上报告了类似的问题。对于这种不良行为有没有最终的解决办法?

    这是我的文件清单:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="incredible.riskofrain.app">
    
    <application android:allowBackup="true"
        android:label="@string/app_name"
        android:icon="@drawable/main_icon">
    
        <receiver android:name=".RORAppWidgetProvider" >
    
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
    
            <meta-data android:name="android.appwidget.provider"
                       android:resource="@xml/ror_appwidget_info" />
    
        </receiver>
    
        <activity android:name=".RORAppWidgetConfigure">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
            </intent-filter>
        </activity>
    
        <activity android:name="incredible.riskofrain.app.MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    
    </application>
    

    AppWidget_Info:

    android:minWidth="200dp"
    android:minHeight="80dp"
    android:updatePeriodMillis="1000"
    android:initialLayout="@layout/ror_appwidget"
    android:configure="incredible.riskofrain.app.RORAppWidgetConfigure"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen"   >
    
    public class RORAppWidgetProvider extends AppWidgetProvider {
    
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    
            final int N = appWidgetIds.length;
            Calendar c = Calendar.getInstance();
            String time = "" + c.get(Calendar.MINUTE)+ ":" + c.get(Calendar.SECOND);
    
    
            for (int i=0; i<N; i++) {
                int appWidgetId = appWidgetIds[i];
    
                RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.ror_appwidget);
                views.setTextViewText(R.id.textview, time);
    
                appWidgetManager.updateAppWidget(appWidgetId, views);
                Toast.makeText(context, "onUpdate " + time + " " + appWidgetId, Toast.LENGTH_LONG).show();
    
            }
    
        }}
    

    AppWidgetConfigure:

    public class RORAppWidgetConfigure extends Activity {
    
    int appWidgetId; Button button; AppWidgetManager appWidgetManager;
    RemoteViews views;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        setContentView(R.layout.ror_configure);
        button = (Button) findViewById(R.id.button);
    
        appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
        Bundle extras = getIntent().getExtras();
    
        if (extras != null) {
            appWidgetId = extras.getInt(
                    AppWidgetManager.EXTRA_APPWIDGET_ID,
                    AppWidgetManager.INVALID_APPWIDGET_ID);
        }
    
        button.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View view) {
    
                views = new RemoteViews(getPackageName(),  R.layout.ror_appwidget);
                appWidgetManager.updateAppWidget(appWidgetId, views);
    
                Intent resultValue = new Intent();
                resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
                setResult(RESULT_OK, resultValue);
    
                Toast.makeText(getApplication().getApplicationContext(), "Configure, ID: - " + appWidgetId+"", Toast.LENGTH_LONG).show();
    
                finish();
    
            }
        });
    
        super.onCreate(savedInstanceState);
    }}
    
  • 共有1个答案

    上官锦
    2023-03-14

    您可以使用broasdcast接收器更新小部件…

    查看此链接:

    参考链接

    <!-- Broadcast Receiver that will process AppWidget updates -->
    <receiver android:name=".WordWidget" android:label="@string/widget_name">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_word" />
    </receiver>
    

    我希望它对你有用。

     类似资料:
    • 我有一个棘手的问题要解决。在这种情况下,我有一个容器,它扩展了设备尺寸的高度和宽度。在这个小部件中,我还有其他小部件,它们放置在可见区域的范围内。所以现在我得到一个错误,在这种情况下,底部区域溢出。我以为当我改变状态时,我可以将不透明度设置为0并将其翻转为1,但事实并非如此,因为Flutter仍然知道那里有东西。在旧的Android中,您可以将可见性设置为“消失”,使其不占用空间。 这是我的布局代

    • 我试图让我的UI显示两个按钮,其中一个稍微重叠在另一个,在一个全幅卡的中间。因为堆栈的宽度只能与其未定位的子级相同,所以我添加了一个宽度为double.infinity的SizedBox的未定位子级,以便给我一个画布来放置按钮,但我不知道该放什么作为SizedBox的高度。理想情况下,无论用户是在手机上还是在平板电脑上,我都希望这个小部件能够适当地调整自己的大小,所以我宁愿将SizedBox的高度

    • 我的Google Glass今天更新到了KitKat,我认为我已经成功地完成并更新了Eclipse,但是Eclipse在更新引入GDK的新方法上出现了错误。例如,部分更新是 setText()期望java.lang.CharSequence 所以,我把代码从 card.set文本(some_String); 到 card.set文本(some_CharSequence); 然而,当我这样做时,ec

    • 问题内容: class GraphGenerator1 extends JPanel { ChartPanel chartPanel, sbc; 我有一个要更新的条形图,我尝试了revalidate和repaint方法,但没有成功。我什至还添加了chartPanel.addMouseListener(this)。我不知道我在哪里出错或应该在哪里添加一些内容。我有意将mouseListener添加到

    • 下面是我的代码: 输出:输出:显示最小数字0