1,
掌握Widget的用:
Widget的用途,能夠添加到手機桌面的程序
2,
Widget的特點和用法步驟:
特點:快捷,方便,個性化,可自定義功能,可及時控制更新Widget顯示內容
3,
用法步驟流程圖
- 繪制Widget布局
- 配置Widget的基本屬性
- 定義AppWidgetProvider
- 提供Configuration Activity
4,
Android Widget實現一個基礎的時鍾功能
效果:
- 可以自動更新時間
- 可以添加和刪除時鍾Widget
5,
完整代碼:
package com.example.widget; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; /** * 類似廣播,是桌面小組件Widget的Provider */ public class widget extends AppWidgetProvider { static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { CharSequence widgetText = context.getString(R.string.appwidget_text); // Construct the RemoteViews object RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); views.setTextViewText(R.id.tv, widgetText); // Instruct the widget manager to update the widget appWidgetManager.updateAppWidget(appWidgetId, views); } //刷新widget的時候執行,remoteView和AppWidgetManager @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // There may be multiple widgets active, so update all of them for (int appWidgetId : appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId); } } //第一個widget添加到屏幕上執行 @Override public void onEnabled(Context context) { // Enter relevant functionality for when the first widget is created super.onEnabled(context); //啟動Service context.startService(new Intent(context, TimerService.class)); } //最后一個widget被從屏幕移除執行 @Override public void onDisabled(Context context) { // Enter relevant functionality for when the last widget is disabled super.onDisabled(context); context.stopService(new Intent(context, TimerService.class)); } //Widget被從屏幕移除 @Override public void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds); } //這個方法一般不會重寫,無論操作中間(上面)的哪些方法,都會執行onReceive @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); } }
service:
package com.example.widget; import android.app.Service; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Intent; import android.os.IBinder; import android.widget.RemoteViews; import androidx.annotation.Nullable; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerService extends Service { //java.util.Timer下的定時器 private Timer timer; private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { updateViews(); } }, 0, 1000); } private void updateViews() { String time = sdf.format(new Date()); RemoteViews rv = new RemoteViews(getPackageName(), R.layout.widget); rv.setTextViewText(R.id.tv, "黃朝陽666 : " + time); AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext()); ComponentName cn = new ComponentName(getApplicationContext(), widget.class); manager.updateAppWidget(cn, rv); } @Override public void onDestroy() { super.onDestroy(); timer = null; } }
6,
添加和刪除天氣Widget:
7,
8,