Android 학습 10-----Android 구성 요소 통신(8)데스크 톱 디 스 플레이 구성 요소:AppWidget
AppWidget
안 드 로 이 드 폰 을 사용 할 때 사용 자 는 자주 사용 하 는 소프트웨어 를 데스크 톱 에 끌 어 다 놓 아 조작 하기 편리 하 게 한다.이 때 는 AppWidget 구성 요 소 를 사용 해 야 합 니 다.android.apwidget 패키지 에서 5 개의 핵심 동작 류 를 종합 합 니 다.
No.
클래스 이름
묘사 하 다.
1
AppWidgetProvider
AppWidget 의 기본 동작 을 정 의 했 습 니 다.하위 클래스 를 통 해 설정 해 야 합 니 다.
2
AppWidgetProviderInfo
구성 요소 의 크기,업데이트 시간 등 AppWidget 구성 요소 의 메타 데이터 공급 자
3
AppWidgetHostView
AppWidget 의 View 디 스 플레이 를 만 듭 니 다.이것 은 진정한 View 이 고 이에 대응 하 는 RemoteView 도 있 습 니 다.
4
AppWidgetHost
AppWidget 의 서 비 스 를 감청 하고 AppWidgetHostView 를 만 듭 니 다.
5
AppWidgetManager
해당 AppWidget 업데이트 에 사용
AppWidget 은 데스크 톱 에 화면 을 표시 해 야 하기 때문에 이 화면 은 AppWidgetManager 프로그램 을 통 해 제어 해 야 하기 때문에 android.widget.RemoveViews 류 를 사용 해 야 합 니 다.이러한 주요 기능 은 View 의 디 스 플레이 실 체 를 설명 하 는 것 입 니 다.RemoveViews 는 프로 세 스 간 통신 체 제 를 통 해 AppWidgetHost 를 전달 합 니 다.
이 RemoteViews 는 하나의 프로 세 스 의 컨트롤 을 다른 프로 세 스에 삽입 하여 표시 하 는 방법 일 뿐 입 니 다.모든 이벤트 처리 작업 은 원본 프로 세 스에 있 습 니 다.AppWidget 은 RemoveViews 에 의 해 디 스 플레이 내용 의 업데이트 작업 을 완성 해 야 합 니 다.RemoveViews 는 자주 사용 하 는 방법 이 있 습 니 다.
No.
방법.
묘사 하 다.
1
Public RemoteViews(String packageName,int layoutId)
새 RemoveViews 구성 요 소 를 만 들 고 필요 한 레이아웃 관리자 파일 을 지정 합 니 다.
2
Public void addView(int viewId,RemoteViews nestedView)
RemoveViews 에 구성 요 소 를 추가 합 니 다.
3
Public void setXxx(int viewId,String methodName,Xxx value)
setBoolean(),setImageViewResource(),setTextViewText()등 지정 한 내용 을 설정 합 니 다.
4
Public void setOnClickPendingIntent(int viewId,PendingIntent pendingIntent)
이벤트 실행 을 눌 렀 을 때 동작 할 PendingIntent 대상 설정
5
Public void setProgressBar(int viewId,int max,int progress,Boolean indeterminate)
동작 할 ProgressBar 구성 요소 설정
RemoveViews 클래스 를 원 격 View 로 제외 하고 Activity 프로그램 에서 도 RemoveView 구성 요소 의 동작 에 대응 하 는 AppWidgetProvider 클래스 를 제공 합 니 다.문 서 를 통 해 AppWidgetProvider 는 BroadcastReceiver 의 하위 클래스 임 을 알 수 있 기 때문에 사용 할 때 AndroidManifest.xml 에 receive 노드 를 설정 해 야 합 니 다.AppWidgetProvider 클래스 에서 도 Activity 클래스 의 생명주기 제어 방법 을 제 공 했 는데 그 방법 은 다음 과 같다.
No.
방법.
묘사 하 다.
1
Public void onDeleted(Context context,int[] appWidget)
AppWidget 삭제 시 터치
2
Public void onDisabled(Context context)
마지막 AppWidget 삭제 시 터치
3
Public void onEnabled(Context context)
첫 번 째 AppWidget 시작 시 터치
4
Public void onReceive(Context context,Intent intent)
방송 이벤트 수락
5
Public void onUpdate(Context context, AppWidgetManager appWidgetManger, int[] appWidgetIds)
지정 한 업데이트 시간 이 도착 하거나 사용자 가 AppWidget 을 추가 할 때 터치 합 니 다.
주:
1.onUpdate 방법 은 AppWidget 구성 요소 의 디 스 플레이 기능 과 원 격 AppWidget 의 이벤트 처리 바 인 딩 을 결정 합 니 다.구성 요소 가 업데이트 되 었 을 때 AppWidgetManager 류 를 사용 하여 원 격 AppWidget 구성 요소(엄 밀 히 말 하면 RemoveViews)를 업데이트 해 야 합 니 다.AppWidgetManager 는 Action 이름 을'android.apwidget.action.APWIDGET'이 라 고 방송 합 니 다.UPDATE 의 Intent.
2.onDisabled 와 onEnabled 방법 에 대해 안 드 로 이 드 의 한 프로그램 이 데스크 톱 에 여러 개의 표 시 된 구성 요 소 를 동시에 설정 할 수 있 기 때 문 입 니 다.
MyAppWidget.java
package com.iflytek.demo;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
public class MyAppWidget extends AppWidgetProvider {
@Override
public void onDeleted(Context context, int[] appWidgetIds) {//
System.out.println("*** MyAppWidget onDeleted");
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context) {//
System.out.println("*** MyAppWidget onDisabled");
super.onDisabled(context);
}
@Override
public void onEnabled(Context context) {//
System.out.println("*** MyAppWidget onEnabled");
super.onEnabled(context);
}
@Override
public void onReceive(Context context, Intent intent) {//
System.out.println("*** MyAppWidget onReceive");
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {//
System.out.println("*** MyAppWidget onUpdate");
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
위 에 서 는 AppWidget Provider 의 수명 주기 와 관련 된 몇 가지 방법 만 복사 할 뿐,AppWidget 프로그램 을 표시 하려 면 데스크 톱 디 스 플레이 를 설정 한 프로필 을 정의 해 야 합 니 다.이 파일 은 res\xml 폴 더 에 저 장 됩 니 다.xdwang_appwidget.xml.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="80px"
android:minWidth="300px"
android:updatePeriodMillis="6000"
android:initialLayout="@layout/xdwang_appwidget">
</appwidget-provider>
xdwang_appwidget.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/img"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<Button
android:id="@+id/but"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text=" " />
</LinearLayout>
AndroidManifest.xml
<receiver android:name=".MyAppWidget" >
<!-- AppWidget -->
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<!-- AppWidget ,android:name:AppWidget ,android:resource -->
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/xdwang_appwidget" />
</receiver>
2.AppWidget 을 사용 하여 Activity 로 이동 하여 조작
앞에서 우 리 는 AppWidget 프로그램의 설정 을 간단하게 설명 하 였 으 나,실제 상황 에서 데스크 톱 에 표 시 된 AppWidget 을 누 르 면 Activity 프로그램 에 들 어가 더욱 복잡 한 조작 처 리 를 할 수 있 는 경우 가 많 습 니 다.여기 서 먼저 AppWidgetManager 가 제공 하 는 방법 을 살 펴 보 겠 습 니 다.
No.
방법.
묘사 하 다.
1
Public void updateAppWidget(int appWidgetId,RemoveViews views)
지정 한 AppWidget 구성 요소 업데이트
2
Public void updateAppWidget(ComponentName provider, RemoveViews views)
지정 한 AppWidget 구성 요소 업데이트
3
Public void updateAppWidget(int[] appWidgetIds,RemoveViews views)
지정 한 AppWidget 구성 요소 업데이트
4
Public static AppWidgetManager getInstance(Context context)
AppWidgetManager 의 인 스 턴 스 를 가 져 옵 니 다.
MyAppWidget.java
package com.iflytek.demo;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class MyAppWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {//
for (int x = 0; x < appWidgetIds.length; x++) {// AppWidget
Intent intent = new Intent(context, AppWidget02Activity.class);// Activity
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);// Intent
RemoteViews remote = new RemoteViews(context.getPackageName(),
R.layout.xdwang_appwidget);// RemoveViews
remote.setOnClickPendingIntent(R.id.but, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds[x], remote);//
}
}
}
3.AppWidget 을 사용 하여 방송 MyAppWidget.자바
package com.iflytek.demo;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class MyAppWidget extends AppWidgetProvider {
@Override
public void onReceive(Context context, Intent intent) {
if ("com.iflytek.action.MYAPPWIDGET_UPDATE".equals(intent.getAction())) {// Action
RemoteViews remote = new RemoteViews(context.getPackageName(),
R.layout.xdwang_appwidget);// RemoveViews
remote.setImageViewResource(R.id.img, R.drawable.ic_launcher);//
remote.setTextViewText(R.id.but, " ");//
AppWidgetManager appWidgetManager = AppWidgetManager
.getInstance(context);// AppWidgetManager
ComponentName componentName = new ComponentName(context,
MyAppWidget.class);//
appWidgetManager.updateAppWidget(componentName, remote);//
} else {
super.onReceive(context, intent); // , onUpdate()
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Intent intent = new Intent();// Intent
intent.setAction("com.iflytek.action.MYAPPWIDGET_UPDATE");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);// Intent
RemoteViews remote = new RemoteViews(context.getPackageName(),
R.layout.xdwang_appwidget);// RemoveViews
remote.setOnClickPendingIntent(R.id.but, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remote);//
}
}
AndroidManifest.xml
<receiver android:name=".MyAppWidget" >
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<intent-filter >
<action android:name="com.iflytek.action.MYAPPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/xdwang_appwidget" />
</receiver>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.