Android widget 데스크 톱 위 젯 과 RemoteViewsService

개술android 데스크 톱 플러그 인 은 주로 AppWidget 프레임 워 크 에 의존 합 니 다.관련 클래스:
  • AppWidgetProvider: BroadcastRecevier 하위 클래스, 업데이트 수신, 알림 삭제
  • AppWidgetProvderInfo: AppWidget 관련 정보 (크기, 업데이트 빈도 등), xml 형식
  • AppWidgetManger: AppWidget 관리 클래스, provider 에 메시지 보 내기
  • RemoteViews: 다른 프로 세 스에 서 실행 할 수 있 는 클래스 로 provider 에 알림 을 보 낼 수 있 습 니 다.
  • RemoteViewsService: 원 격 서비스 어댑터 로 RemoteViews 를 요청 하고 RemoteViews 를 관리 할 수 있 는 서비스 입 니 다.
  • RemoteViewsFactory: 원 격 집합 보 기 를 채 울 수 있 는 RemoteViews Factory 를 제공 합 니 다.

  • 실현 절차
  • 성명 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>
    AppWidgetProvider 그 본질은 하나 BroadcastReceiver 인 데 그 중에서 APPWIDGET_UPDATE 는 필수 적 이 고 수신 broadcast 에 사용 된다.meta-dataAppWidgetProviderInfo 대응 하 는 자원 xml 의 위 치 를 발 표 했 는데 그 중에서 Widget 의 레이아웃 파일, 새로 고침 빈도, 최소 너비 와 높이 를 포함한다.
    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; iint 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>

    추가 xml 시 팝 업 widget, 필터 추가 activity 가 필요 합 니 다.
    주의사항:
  • Activity 는 반드시 테이프 android.appwidget.action.APPWIDGET_CONFIGURE 의 result 를 되 돌려 야 한다.
  • 성명 EXTRA_APPWIDGET_ID 후 onUpdate () 는 Widget 추가 시 호출 되 지 않 으 며, Activity 호출 Configuration Activity 은 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();

    집합 보기 RemoteViewsService
    위의 방식 은 하나의 widget 을 위 한 것 입 니 다. 만약 우리 의 widget 에 AppWidgetManager.updateAppWidget(), ListView 등 집합 보 기 를 포함 하고 있다 면, 우 리 는 하나의 클래스 Gridview 를 빌려 계승 RemoteViewsService 하고 복사 RemoteViewsService 를 되 돌려 야 합 니 다 onGetViewFactory.
    public class StackWidgetRemoteViewsService extends RemoteViewsService {
        @Override
        public RemoteViewsFactory onGetViewFactory(Intent intent) {}
    }

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

    좋은 웹페이지 즐겨찾기