Android Widget 的制作
一、生成Widget控件
1.写一个类:MyWidget extends AppWidgetProvider
2.注册:
<receiver android:name=".receiver.MyWidget"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info"/> </receiver>
3.在 res/xml 下写一个:appwidget_info.xml
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="1800000" android:initialLayout="@layout/process_widget" > </appwidget-provider>
4.写一个Widget相应的布局 process_widget.xml
二、事件 --- 用到PendingIntent和RemoteViews
1.PendingIntent:主要用来设置桌面程序的相应方式。此对象可以有三种Intent方式,
1)开始一个新的Activity
2)发送一个广播
3)开始一个service
2.RemoteViews:因为桌面程序和app程序不是属于一个进程,不能通过正常的操作控件的方式来操作.
需要使用系统提供的RemoteViews对象来操作桌面程序.在这个类中有设置APP Widget中控件属性的方法.
3.在MyWidget中:
// 在第一个widget被拖到屏幕上时调用 --- 可以用来开启后台服务 @Override public void onEnabled(Context context) { super.onEnabled(context); } // 在最后一个widget被移除的时候调用 --- 可以用来关闭后台服务 @Override public void onDisabled(Context context) { super.onDisabled(context); } // 在到达指定的更新时间之后或者向桌面添加App widget实例时调用 --- 可以用来重启服务,防止服务被用户关了 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); }
4.在UpdateWidgetService中:
//设置更新的组件 ComponentName provider = new ComponentName(UpdateWidgetService.this, MyWidget.class); //获得RemoteViews对象 RemoteViews views = new RemoteViews(getPackageName(), R.layout.process_widget); views.setTextViewText(R.id.textView_widget_process_count, "正在运行的进程:" + SystemInfoUtils.getRunningProcessCount(getApplicationContext()) + "个"); //描述一个动作,由另外一个应用进程执行 //自定义一个广播事件,杀死后台进程,广播注册时的action是com.baymax.detector.killall Intent intent = new Intent(); intent.setAction("com.baymax.detector.killall"); PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.btn_clear, pendingIntent); AppWidgetManager awm = AppWidgetManager.getInstance(this); awm.updateAppWidget(provider, views);
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。