Android 小部件:在小部件添加到屏幕之前显示配置活动

问题描述 投票:0回答:3

我有一个 Android Widget,它使用 Web 服务来检索并显示 Widget 上的数据。该小部件具有

extends PreferenceActivity
的配置活动。安装小部件后,配置活动就会启动,这是该小部件所需的行为。

问题是,每当将小部件添加到主屏幕时,小部件都会在配置活动启动/完成之前尝试更新自身,这可能会导致长时间延迟(几秒钟)。配置活动应该在每次添加新小部件时小部件尝试更新自身之前发生。

以下是添加小部件时我在 LogCat 中看到的事件序列:

    Widget.onRecive:操作= APPWIDGET_ENABLED
  1. Widget.onEnabled
  2. Widget.onReceive:操作= APPWIDGET_UPDATE
  3. Widget.onUpdate:Widget服务启动。
  4. WidgetService.onStartCommand:可能需要长时间运行的工作,这将延迟配置活动的立即显示。
  5. WidgetConfiguration.onCreate
  6. Widget.onReceive:操作= APPWIDGET_UPDATE
  7. Widget.onUpdate:Widget服务再次启动
  8. WidgetService.onStartCommand:再次执行可能长时间运行的工作。
发生的情况是,当添加小部件时,服务将在显示配置视图之前启动。

Manifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.xxx.xxxwidget" android:versionCode="1" android:versionName="@string/app_version" > <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:debuggable="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name="xxxWidget" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info" /> </receiver> <activity android:name="xxxWidgetConfigure" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="xxxWidgetService" /> </application> </manifest>



问题 有没有办法在系统尝试将小部件添加到主屏幕之前强制显示配置活动?

android android-widget android-manifest sharedpreferences android-preferences
3个回答
19
投票
来自Android文档:

http://developer.android.com/guide/topics/appwidgets/index.html#Configuring

创建App Widget时不会调用onUpdate()方法(启动配置Activity时系统不会发送ACTION_APPWIDGET_UPDATE广播)。首次创建 App Widget 时,配置 Activity 负责向 AppWidgetManager 请求更新。然而,后续更新将会调用 onUpdate() ——它只会在第一次被跳过。

然而,这似乎并不正确!

我所做的就是向 SharedPreferences 添加一个布尔值,它告诉我这个 widgetId 是否已经通过配置。如果没有跳过此更新。在您的 AppWidgetProvider 类的 onUpdate 方法中实现此功能。


0
投票
不要忘记在 AppWidgetProviderInfoXML 中添加配置活动也很重要。

来源:

https://developer.android.com/develop/ui/views/appwidgets/configuration#declare https://developer.android.com/develop/ui/views/appwidgets#AppWidgetProviderInfo


-1
投票
在清单中声明 ActivityConfig:

<activity android:name="com.zoostudio.moneylover.widget.ActivityWidgetConfig" android:label="Hello Widget Config"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> </intent-filter> </activity>



更新小部件类:

public abstract class SampleWiget extends AppWidgetProvider {
}

按照

android开发者小部件支持来了解它。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.