gpt4 book ai didi

android - AppWidgetProvider 中的 updateAppWidget 不会导致更新

转载 作者:行者123 更新时间:2023-11-30 04:26:27 69 4
gpt4 key购买 nike

之前已经讨论过这个问题,但解决方案似乎不适用于我的问题。

我创建了一个 Android 小部件。我正在使用 android 2.0。

当接收到某个 Intent 并且几乎一切正常时,Widget 应该更新水平进度条。广播到达小部件,调用 updateGUI() 方法,所有三个日志记录更新都可以在 DDMS 中看到。

问题是进度条没有更新。

如果我使用 appWidgetManager.updateAppWidget(thisWidget, updateViews);仅显示错误小部件“Problems lodaing the widget”,但没有此行我不知道如何更新。

整个 Widget 看起来像这样,启动服务和接收更新工作正常。

package org.ambientdynamix.applications.stepviz3;


import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.RemoteViews;

public class StepWidget extends AppWidgetProvider {

// Classname for logging purposes
private final String TAG = "StepWidget";
private final String APPWIDGET_UPDATE = "android.appwidget.action.APPWIDGET_UPDATE";
StepCounterService mService;
boolean mBound = false;
Context context;
int[] ids;
int x=0;

@Override
public void onUpdate(Context thecontext, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
Log.i(TAG, "onUpdate()");
context=thecontext;
ids=appWidgetIds;
//Start Service
Intent intent = new Intent(context, StepCounterService.class);
context.startService(intent);
super.onUpdate(thecontext, appWidgetManager, appWidgetIds);
}

@Override
public void onReceive(Context thecontext, Intent intent)
{
context=thecontext;
if (intent.getAction().equals(APPWIDGET_UPDATE))
{
int p = intent.getExtras().getInt("steps");
x=p;
Log.i(TAG, "WIDGET: YEAH! TOAST!"+x);
updateGUI();
}
super.onReceive(thecontext, intent);
}

private void updateGUI()
{
if(context!=null)
{
Log.i(TAG, "WIDGET: Update "+x);
RemoteViews updateViews = null;
updateViews = new RemoteViews(context.getPackageName(), R.layout.widget);
updateViews.setProgressBar(R.id.progressBarX, 100, x, false);
Log.i(TAG, "WIDGET: Update2 "+x);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
//appWidgetManager.updateAppWidget(ids, updateViews);
ComponentName thisWidget = new ComponentName(context, StepWidget.class);
//appWidgetManager.updateAppWidget(thisWidget, updateViews);
Log.i(TAG, "WIDGET: Update3 "+x);
}
}

}

基于jawsware的Tip的破解方案

好的,有一个 hack 解决方案:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisWidget = new ComponentName(context, StepWidget.class);
ids=appWidgetManager.getAppWidgetIds(thisWidget);
for(int i=0; i<ids.length; i++)
{
appWidgetManager.updateAppWidget(ids[i], updateViews);
}

问题在于,id 数组为空,因此无法找到 View 。然而,这将更新该类型的所有小部件。

最佳答案

试试这个怎么样?

将此添加到 onReceive

widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1)

将您的更新更改为:

appWidgetManager.updateAppWidget(widgetId, updateViews);

关于android - AppWidgetProvider 中的 updateAppWidget 不会导致更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8402711/

69 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com