Android 위 젯 데스크 톱 플러그 인

개술
안 드 로 이 드 의 데스크 톱 플러그 인 은 주로 AppWidget 프레임 워 크 에 의존 합 니 다.관련 클래스:
  • AppWidgetProvider: BroadcastRecevier 하위 클래스, 업데이트 수신, 알림 삭제
  • AppWidgetProvderInfo: AppWidget 관련 정보 (크기, 업데이트 빈도 등), xml 형식
  • AppWidgetManger: AppWidget 관리 클래스, provider 에 메시지 보 내기
  • RemoteViews: 다른 프로 세 스에 서 실행 할 수 있 는 클래스 로 provider 에 알림 을 보 낼 수 있 습 니 다.

  • 실현 절차
  • 성명 AndroidManifest
  • xml 파일 초기 화 정의
  • widget 레이아웃 정의 Layout xml 파일
  • AppWidgetProvider 를 계승 하여 관련 논 리 를 실현
  • AndroidManifest.xml:
    <receiver android:name="ExampleAppWidgetProvider" >
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info" />
    </receiver>

    그 중 APPLIDGETUPDATE 는 브 로드 캐 스 트 를 받 는 데 필수 적 입 니 다.meta - data 는 AppWidgetProviderInfo 에 대응 하 는 자원 xml 의 위 치 를 설명 합 니 다. 이 는 Widget 의 xml 레이아웃 파일, 새로 고침 빈도, 최소 너비 등 을 포함 합 니 다.
    res/xml/example_appwidget_info
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="40dp" android:minHeight="40dp" android:updatePeriodMillis="86400000" android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" android:configure="com.example.android.ExampleAppWidgetConfigure" android:resizeMode="horizontal|vertical" android:widgetCategory="home_screen">
    </appwidget-provider>
  • minWidth & minHeight: Widget 의 최소 너비
  • 를 정의 합 니 다.
  • updatePeriodMillis: Widget 의 리 셋 빈 도 를 정의 합 니 다
  • initial Layout: Widget 의 레이아웃 Layout 파일
  • preview Image: 사용자 가 Widget 을 추가 할 때 미리 보기 그림
  • configure: Widget 을 추가 할 때 나타 나 는 Widget 설정 activity, 없 으 면 설정 하지 않 음
  • resizeMode: 수평 과 수직 방향 으로 크기 를 조정 할 수 있 습 니까? horizontal, vertical, none, horizontal | vertical
  • widget 범주: Widget 이 표시 할 위치, homescreen (데스크 톱), keyguard (잠 금 화면, 5.0 이상) 의 자세 한 속성 은 AppWidgetProvider Info 를 참고 할 수 있 습 니 다.

  • ExampleAppWidgetProvider:
    public class ExampleAppWidgetProvider extends AppWidgetProvider {
    
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            final int N = appWidgetIds.length;
    
            // Perform this loop procedure for each App Widget that belongs to this provider
            for (int i=0; i<N; i++) {
                int appWidgetId = appWidgetIds[i];
    
                // Create an Intent to launch ExampleActivity
                Intent intent = new Intent(context, ExampleActivity.class);
                PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
    
                // Get the layout for the App Widget and attach an on-click listener
                // to the button
                RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
                views.setOnClickPendingIntent(R.id.button, pendingIntent);
    
                // Tell the AppWidgetManager to perform an update on the current app widget
                appWidgetManager.updateAppWidget(appWidgetId, views);
            }
        }
    }

    Configuration Activity
    <activity android:name=".ExampleAppWidgetConfigure">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
        </intent-filter>
    </activity>

    widget 을 추가 할 때 나타 나 는 activity, android. apwidget. action. APPIDGET 를 추가 해 야 합 니 다.CONFIGURE 필터.
    주의사항:
  • Activity 는 반드시 밴드 EXTRA 를 되 돌려 주어 야 합 니 다.APPWIDGET_ID 의 result.
  • Configuration Activity 를 설명 한 후 onUpdate () 는 Widget 에 추 가 될 때 호출 되 지 않 습 니 다. Activity 는 AppWidget Manager. updateAppWidget () 을 호출 하여 Widget 업 데 이 트 를 완료 해 야 합 니 다.
  • Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    if (extras != null) {
        mAppWidgetId = extras.getInt(
            AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID);
    }
    
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.example_appwidget);
    appWidgetManager.updateAppWidget(mAppWidgetId, views);
    
    Intent resultValue = new Intent();
    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    setResult(RESULT_OK, resultValue);
    finish();

    참고: 앱 위 젯
    Android 개발 앱 위 젯 상세 설명

    좋은 웹페이지 즐겨찾기