- 玩转AppWidget
使用安卓的时候相信大家一定还记得快捷方式的运用,就是将一些经常用的软件拖到桌面上以方便操作。例如qq快捷联系人,音乐快捷播放器之类的而这些肯定有一个支持其运行的程序,这些程序必须通过AppWidget组件来完成。
-
AppWidgetProvider:继承自BroadcastReceiver,在App Widget应用update,enable,disable和deleted时接受通知。其中onUpdate,onReceive是最常用到的方法。
-
AppWidgetProviderInfo:描述AppWidget的大小,更新频率和初始界面等信息,以xml文件的形式存在于应用中的res/xml目录下。
-
AppWidgetManager:负责管理AppWidget,向AppWidgetProvider发送通知。
-
RemoteViews:一个可以在其他应用进程中运行的类,是构造AppWidget的核心。
首先我们定义MyAppWidget 类extends AppWidgetProvider
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);
}
}
然后我们想在桌面显示的图标布局函数res\xl\ee.xml
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/a10" />
定义桌面显示的AppWidgetProvider类配置文件res\xml\ee.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/ee">//组件所需要的配置文件
</appwidget-provider>
之后就是AnsroidManifest配置
<receiver android:name=".MyAppWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/ee" />
</receiver>
实现效果自己在安卓小组件找到自己定义的AppWidget拖到桌面即可,小编的是这样的哦
现在其实我们点击桌面上的图标是毫无反应的,这是因为我们还未绑定按钮跳转到相应的Activity上,所以呢,
我们在
public class MyAppWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for (int x = 0; x < appWidgetIds.length; x++) {
Intent intent = new Intent(context,MyAppWidgetDemo.class) ;
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews remote = new RemoteViews(context.getPackageName(),
R.layout.ee);
remote.setOnClickPendingIntent(R.id.but, pendingIntent) ;
appWidgetManager.updateAppWidget(appWidgetIds[x], remote) ;
}
}
}
将这个一段改为这样就好,这里用for循环是为了获取多个快捷方式,因为很多爱玩的用户总是喜欢这里建
一个,那里建一个,因此要获取到所有的快捷方式。
现在我们实现了点击图片跳转到Activity
实现效果如下: