11

Webサービスを使用してウィジェットのデータを取得して表示するAndroid Widgetがあります。このウィジェットは、構成アクティビティがextends PreferenceActivityです。設定アクティビティは、ウィジェットがインストールされるとすぐに起動します。これは、このウィジェットの望ましい動作です。Android Widget:ウィジェットが画面に追加される前の設定アクティビティを表示します。

問題は、ウィジェットがホーム画面に追加されるたびに、ウィジェットが設定アクティビティの開始/完了前に自分自身を更新しようとするため、長い遅延(数秒)が発生する可能性があります。新しいウィジェットが追加されるたびに、ウィジェットが自身を更新しようとする前に、構成アクティビティーが発生する必要があります。

  1. Widget.onRecive:ここ

    は、ウィジェットが追加されたとき、私はLogCatで見ている一連のイベントである= APPWIDGET_ENABLED

  2. アクションがWidget.onReceive
  3. をWidget.onEnabled:アクションを= APPWIDGET_UPDATE
  4. Widget.onUpdate:ウィジェットサービスが開始されました。
  5. WidgetService.onStartCommand:構成アクティビティがすぐに表示されるのを遅らせる潜在的に長い実行中の作業。
  6. WidgetConfiguration.onCreate
  7. Widget.onReceive:アクション= APPWIDGET_UPDATE
  8. Widget.onUpdate:ウィジェットサービスが再び
  9. 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のドキュメントから

+1

私は厄介な問題がありました。 update()メソッドの呼び出しは、設定アクティビティが表示される前に行われます。私はこの振る舞いを変える方法を見つけませんでした。 – mrd

答えて

17

: アプリウィジェットが作成されたときにonUpdate()メソッドが呼び出されることはありませんhttp://developer.android.com/guide/topics/appwidgets/index.html#Configuring

(設定アクティビティが起動されたときに、システムがACTION_APPWIDGET_UPDATEブロードキャストを送信しません)。 Appウィジェットが最初に作成されたときにAppWidgetManagerから更新を要求するのは、コンフィグレーションアクティビティの責任です。ただし、それ以降の更新ではonUpdate()が呼び出されます。これは初めてスキップされるだけです。

これは間違いありません。

私が行ったことはSharedPreferencesにブール値を追加して、このwidgetIdが設定済みであるかどうかを教えてくれました。この更新をスキップしない場合これをAppWidgetProviderクラスのonUpdateメソッドに実装します。

+0

設定アクティビティが起動する前にACTION_APPWIDGET_UPDATEが呼び出されています – scottyab

+7

ドキュメントが古くなり、単純ではないと思われます。 – Tarantula

+1

この問題はhttps://code.google.com/p/で報告されていますandroid/issues/detail?id = 3696 –

-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 developer widget supportに従ってください。

関連する問題