gpt4 book ai didi

android - AppWidget 第一次添加时没有完成更新

转载 作者:行者123 更新时间:2023-11-29 14:15:57 25 4
gpt4 key购买 nike

编辑:我安装了我的应用程序 4.x 设备,没有问题。问题仅存在于 3.x 设备。

我正在尝试在用户设置时手动更新 AppWidget设备上的更改。为此,我使用与此类似的代码:

ComponentName thisWidget = new ComponentName(this, MyAppWidget.class); 
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, updateViews);

我可以看出我的 AppWidget onUpdate 方法被调用为结果,因为我在代码中将一些调试字符串记录到 logcat。然而AppWidget 本身不会在屏幕上发生变化。

有趣的部分来了:如果我旋转我的设备并强制刷新主屏幕(从纵向到横向,反之亦然)最后我的 AppWidget 得到更新。但是旋转设备不会触发调用 onUpdate 方法,因此 AppWidget必须使用早期更新中提供的 RemoteViews。

谁能解释一下如何强制重绘主屏幕我的 AppWidget 何时处理更新?

我正在使用 <uses-sdk android:minSdkVersion="11" />

public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {

// Get all ids
ComponentName thisWidget = new ComponentName(context, MyProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
// Build the intent to call the service
Intent intent = new Intent(context.getApplicationContext(), MyService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);

RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.appwidget_layout);

appWidgetManager.updateAppWidget(appWidgetIds, views);

// Update the widgets via the service
context.startService(intent);
}

还有我的服务:

@Override
public void onStart(Intent intent, int startId) {
Log.i(LOG, "Called");

this.appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext());

this.allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

ComponentName thisWidget = new ComponentName(getApplicationContext(), MyProvider.class);
int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget);
Log.w(LOG, "From Intent" + String.valueOf(allWidgetIds.length));
Log.w(LOG, "Direct" + String.valueOf(allWidgetIds2.length));
config = getResources().getConfiguration();

for (int widgetId : allWidgetIds) {
//do things like starting ASYNCs (couple of them) to fetch data from server
//and set an adapter for the gridview
}

Intent intentOpen = new Intent(getApplicationContext(), MainFragmentActivity.class);
PendingIntent open = PendingIntent.getActivity(getApplicationContext(), 0, intentOpen, 0);
remoteViews.setOnClickPendingIntent(R.id.widget_whole, open);
remoteViews.setViewVisibility(R.id.widgetProgress, View.GONE);
appWidgetManager.updateAppWidget( thisWidget, remoteViews );
Log.d(LOG, "sent!!");
}
stopSelf();

super.onStart(intent, startId); }

最佳答案

对我来说,这听起来像是启动器应用程序中的错误。每次您调用 updateAppWidget 时,AppWidgetManager 都会收到新的布局,并且启动器负责使用这个新布局重新绘制小部件。

当屏幕旋转时 onUpdateupdateAppWidget 没有被调用,但是启动器用它的新布局重新绘制小部件的事实意味着 AppWidgetManager 已经成功接收到新布局。

当屏幕旋转时,启动器被迫重新绘制所有内容(它的 Activity 被重新创建),这就是它显示新布局的原因。

而且这个错误可能在 Android 4.0+ 中得到修复

关于android - AppWidget 第一次添加时没有完成更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765192/

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