11

웹 서비스를 사용하여 위젯에 데이터를 표시하고 표시하는 Android 위젯이 있습니다. 위젯의 구성 활동은 extends PreferenceActivity입니다. 구성 활동은 위젯이 설치되는 즉시 시작됩니다.이 위젯은 원하는 동작입니다.Android Widget : 위젯이 화면에 추가되기 전에 구성 활동 표시

위젯이 홈 스크린에 추가 될 때마다 위젯은 구성 활동이 시작/완료되기 전에 자체 업데이트를 시도하여 잠재적으로 긴 지연 (수 초)을 초래할 수 있습니다. 새 위젯이 추가 될 때마다 위젯이 자체 업데이트를 시도하기 전에 구성 활동이 발생해야합니다. = 액션

  • Widget.onReceive을 Widget.onEnabled APPWIDGET_ENABLED :

    1. Widget.onRecive : 위젯이 추가 될 때 여기에

      내가 로그 캣에서보고 있어요 이벤트의 순서입니다 액션 = APPWIDGET_UPDATE
    2. Widget.onUpdate : 위젯 서비스가 시작되었습니다.
    3. WidgetService.onStartCommand : 구성 작업이 즉시 지연되는 잠재적으로 오래 실행되는 작업.
    4. WidgetConfiguration.onCreate
    5. Widget.onReceive : 행동 = APPWIDGET_UPDATE
    6. Widget.onUpdate : 위젯 서비스가 다시
    7. 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> 
    



    질문
    시스템 전에 표시되는 구성 활동을 강제 할 수있는 방법이 있나요 홈 화면에 위젯을 추가하려고? 안드로이드 문서에서

  • +1

    나는 이상한 문제가있었습니다. update() 메소드 호출은 구성 활동이 표시되기 전에 발생합니다. 이 동작을 변경할 방법이 없습니다. – mrd

    답변

    17

    : 는 App 위젯이 생성 될 때의 onUpdate() 메서드가 호출되지 않습니다 http://developer.android.com/guide/topics/appwidgets/index.html#Configuring

    (구성 활동을 시작할 때 시스템이 ACTION_APPWIDGET_UPDATE 방송을 전송하지 않습니다). App 위젯을 처음 만들 때 AppWidgetManager에서 업데이트를 요청하는 것은 구성 활동의 책임입니다. 그러나 onUpdate()는 후속 업데이트에 대해 호출되며 첫 번째는 건너 뜁니다.

    그러나이 내용이 정확하지 않은 것 같습니다.

    이 widgetId가 구성을 통과했는지 알려주는 SharedPreferences에 부울을 추가했습니다. 이 업데이트를 건너 뛰지 않으면. 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을 따르십시오.