Android Widget实例开发应用是本文要介绍的内容,主要是来了解并学习Android Widget实例应用的开发,具体内容的实现来看本文详解。
Widget并不支持所有的Android组件,只能在Widget中使用如下组件类:
(1)用于布局的组件类。
FrameLayout LinearLayout RelativeLayout
(2)可视组件类
- AnalogClock ImageView ProgressBar TextView Button Chronometer ImageButton
创建Widget描述文件,该文件是Xml格式,必须放在res\xml目录中
- <?xml version="1.0" encoding="utf-8"?>
- <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="309dip"
- android:minHeight="192dip"
- android:initialLayout="@layout/main" 初始化布局
- android:updatePeriodMillis="1000" 更新的时间间隔(毫秒)
- />
- 建立Widget类,该类必须从AppWidgetProvider类继承(AppWidgetProvider是BroadcastReceiver的子类,因此,Widget类可以接受广播消息)
- 在AndroidManifest.xml文件中定义widget
- <receiver android:label="@string/app_name" android:name=".HelloWidget">
- <intent-filter>
- <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
- </intent-filter>
- <meta-data android:name="android.appwidget.provider"
- android:resource="@xml/hello_widget_provider"/>
- </receiver>
- 显示时间,每秒更新
- public class HelloWidget extends AppWidgetProvider {
- private Timer timer;
- private int[] appWidgetIds;
- private AppWidgetManager appWidgetManager;
- private Context context;
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
- super.onUpdate(context, appWidgetManager, appWidgetIds);
- Log.i("Widget", "onUpdate");
- this.context = context;
- this.appWidgetManager = appWidgetManager;
- this.appWidgetIds = appWidgetIds;
- timer = new Timer();
- timer.schedule(task, 0,1000);
- }
- private Handler handler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- switch (msg.what) {
- case 1:
- Time myTime = new Time();
- myTime.setToNow();
- RemoteViews updateViews =
- new RemoteViews(context.getPackageName(),
- R.layout.main);
- updateViews.setTextViewText(R.id.widget_textview, "北京时间"+myTime.format("%H:%M:%S"));
- Log.i("Widget", "北京时间"+myTime.format("%H:%M:%S"));
- // ComponentName thisWidget = new ComponentName(context,HelloWidget.class);
- // appWidgetManager.updateAppWidget(thisWidget, updateViews);
- appWidgetManager.updateAppWidget(appWidgetIds, updateViews);
- break;
- default:
- break;
- }
- }
- };
- private TimerTask task = new TimerTask() {
- public void run() {
- handler.sendEmptyMessage(1);
- }
- };
- }
音乐播放widget
- package cn.stay.widget;
- import android.app.PendingIntent;
- import android.appwidget.AppWidgetManager;
- import android.appwidget.AppWidgetProvider;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Handler;
- import android.os.Message;
- import android.widget.RemoteViews;
- import cn.aoran.activity.R;
- public class HelloWidget extends AppWidgetProvider {
- private static final String WIDGET_BACK = "cn.stay.widget.back";
- private static final String WIDGET_PLAY = "cn.stay.widget.play";
- private static final String WIDGET_NEXT = "cn.stay.widget.next";
- private static final String WIDGET_SONG = "cn.stay.widget.song";
- private static final String WIDGET_CURRENT = "cn.stay.widget.current";
- private String song = "";
- private static Context context;
- private static AppWidgetManager appWidgetManager;
- private static int[] appWidgetIds;
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
- super.onUpdate(context, appWidgetManager, appWidgetIds);
- HelloWidget.context = context;
- HelloWidget.appWidgetIds = appWidgetIds;
- HelloWidget.appWidgetManager = appWidgetManager;
- handler.sendEmptyMessage(0);
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- super.onReceive(context, intent);
- if (WIDGET_SONG.equals(intent.getAction())) {
- song = intent.getStringExtra("song");
- if (song == null || "".equals(song.trim())) {
- song = "未知";
- }
- if (context != null) {
- handler.sendEmptyMessage(1);
- }
- }
- }
- private Handler handler = new Handler() {
- public void handleMessage(Message msg) {
- RemoteViews widgetViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
- super.handleMessage(msg);
- switch (msg.what) {
- case 0:
- context.sendBroadcast(new Intent(WIDGET_CURRENT));
- // Intent intent = new Intent(context,LocalActivity.class);
- // PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0);
- // widgetViews.setOnClickPendingIntent(R.id.widget_sub, pIntent);
- // 上一首
- PendingIntent backIntent = PendingIntent.getBroadcast(context, 0, new Intent(WIDGET_BACK), 0);
- widgetViews.setOnClickPendingIntent(R.id.widget_back_btn, backIntent);
- // 下一首
- PendingIntent nextIntent = PendingIntent.getBroadcast(context, 0, new Intent(WIDGET_NEXT), 0);
- widgetViews.setOnClickPendingIntent(R.id.widget_next_btn, nextIntent);
- // 播放
- PendingIntent playIntent = PendingIntent.getBroadcast(context, 0, new Intent(WIDGET_PLAY), 0);
- widgetViews.setOnClickPendingIntent(R.id.widget_play_btn, playIntent);
- appWidgetManager.updateAppWidget(appWidgetIds, widgetViews);
- break;
- case 1:
- widgetViews.setTextViewText(R.id.widget_song, song);
- // ComponentName thisWidget = new ComponentName(context, HelloWidget.class);
- // AppWidgetManager manager = AppWidgetManager.getInstance(context);
- appWidgetManager.updateAppWidget(appWidgetIds, widgetViews);
- break;
- default:
- break;
- }
- }
- };
- }
小结:详解Android Widget实例开发应用的内容介绍完了,希望通过Android Widget实例内容的学习能对你有所帮助!