Android31_AppWidget使用(二)
程序员文章站
2024-02-26 19:32:22
...
一、PendingIntent介绍
PendingIntent用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。创建之后并不马上使用。PendingIntent用于包装Intent,在一个进程中创建PendingIntent,但是该进程并不会使用它,而是把它交给另外一个进程,当这个进程被触发某个事件时就会使用PendingIntent,这两个进程就相当于AppWidget和我们自己写的程序。
创建PendingIntent的方法有三个(都是静态方法):
1. 启动一个activity
getActivity(Context context, int requestCode, Intent intent, int flags);
2. 发送一个广播
getBroadcast(Context context, int requestCode, Intent intent, int flags);
3. 启动一个服务
getService(Context context, int requestCode, Intent intent, int flags);
二、RemoteViews的作用
RemoteView表示View和主程序不在同一个进程当中。例如一个App Widget就是RemoteView,因为App Widget和主程序就不是在同一个进程当中的。
1. RemoteViews对象表示了一系列的View对象。
2. RemoteViews所表示的对象运行在另外的进程当中。所以就不能够像普通的View那样去操作。
三、在AppWidget当中使用控件
1.向AppWidget中添加ImageButton,res/layout/appwidget.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageButton
android:id="@+id/widgetTextId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/image"
android:background="#00000000"/>
</LinearLayout>
2.res/xml/appwidget_info.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" android:initialLayout="@layout/appwidget" > </appwidget-provider>
3.为Button绑定监听器
由于AppWidget和应用程序运行在不同的进程当中(AppWidget当中的View运行在Home Screen进程当中),所以无法按照之前惯用的方法绑定监听器。
AppWidgetProviderTest.java
package com.android.activity;
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 AppWidgetProviderTest extends AppWidgetProvider{
/**
* AppWIdgetManager对象用来管理widget对象
* appWidgetIds每次向桌面添加的widget都会有一个id
*/
@Override
public void onUpdate(Context context,
AppWidgetManager appWidgetManager,int[] appWidgetIds) {
for(int i = 0; i < appWidgetIds.length; i++){
System.out.println(appWidgetIds[i]);
//创建一个Intent对象,跳转activity
Intent intent = new Intent(context, OtherActivity.class);
//创建一个PendingIntent
PendingIntent pendingIntent = PendingIntent
.getActivity(context, 0, intent, 0);
//得到remoteViews代表了AppWIdget里面的所有控件
RemoteViews remoteViews = new RemoteViews(
context.getPackageName(), R.layout.appwidget);
//设置点击事件就执行,参数:指定被绑定控件的id;当事件发生时,哪个PendingIntent执行
remoteViews.setOnClickPendingIntent(
R.id.widgetbutton, pendingIntent);
//更新Appwidget,指定更新哪一个控件的id,要更新的remoteviews对象
appWidgetManager.updateAppWidget(
appWidgetIds[i], remoteViews);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
System.out.println("AppWidgetProvider --> onDeleted");
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context) {
System.out.println("AppWidgetProvider --> onDisabled");
super.onDisabled(context);
}
@Override
public void onEnabled(Context context) {
System.out.println("AppWidgetProvider --> onEnabled");
super.onEnabled(context);
}
}
运行结果:
点击小鸟图片按钮之后: