diff --git a/appbase/build.properties b/appbase/build.properties index 30ec021..7a9c036 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sat Feb 15 04:45:53 GMT 2025 +#Sat Feb 15 11:51:34 GMT 2025 stageCount=2 libraryProject=libappbase baseVersion=1.5 publishVersion=1.5.1 -buildCount=97 +buildCount=123 baseBetaVersion=1.5.2 diff --git a/appbase/src/main/AndroidManifest.xml b/appbase/src/main/AndroidManifest.xml index 4077ece..2c67860 100644 --- a/appbase/src/main/AndroidManifest.xml +++ b/appbase/src/main/AndroidManifest.xml @@ -60,7 +60,26 @@ - + + + + + + + + + + + + + + + + diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/threads/MainServiceThread.java b/appbase/src/main/java/cc/winboll/studio/appbase/threads/MainServiceThread.java index ec2059f..c8c9066 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/threads/MainServiceThread.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/threads/MainServiceThread.java @@ -4,10 +4,13 @@ package cc.winboll.studio.appbase.threads; * @Author ZhanGSKen@AliYun.Com * @Date 2025/02/14 03:46:44 */ +import android.app.AlarmManager; +import android.app.PendingIntent; import android.content.Context; +import android.content.Intent; import cc.winboll.studio.appbase.handlers.MainServiceHandler; +import cc.winboll.studio.appbase.widgets.TimeWidget; import cc.winboll.studio.libappbase.LogUtils; -import com.hjq.toast.ToastUtils; import java.lang.ref.WeakReference; public class MainServiceThread extends Thread { @@ -38,11 +41,20 @@ public class MainServiceThread extends Thread { @Override public void run() { LogUtils.d(TAG, "run()"); + while (!isExist()) { //ToastUtils.show("run()"); //LogUtils.d(TAG, "run()"); + Intent intent = new Intent(mContext, TimeWidget.class); + intent.setAction(TimeWidget.UPDATE_TIME_ACTION); + //PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + mContext.sendBroadcast(intent); + //AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); + //long interval = 1000; + //alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), interval, pendingIntent); + try { - Thread.sleep(3000); + Thread.sleep(1000); } catch (InterruptedException e) { LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); } diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/TimeWidget.java b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/TimeWidget.java new file mode 100644 index 0000000..e0e5f05 --- /dev/null +++ b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/TimeWidget.java @@ -0,0 +1,85 @@ +package cc.winboll.studio.appbase.widgets; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/15 14:41:25 + * @Describe TimeWidget + */ +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; +import android.appwidget.AppWidgetProvider; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.widget.RemoteViews; +import cc.winboll.studio.appbase.R; +import cc.winboll.studio.libappbase.LogUtils; +import com.hjq.toast.ToastUtils; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.ArrayList; + +public class TimeWidget extends AppWidgetProvider { + + public static final String TAG = "TimeWidget"; + + public static final String UPDATE_TIME_ACTION = "com.example.android.UPDATE_TIME"; + + volatile static ArrayList _Message; + + @Override + public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { + for (int appWidgetId : appWidgetIds) { + updateAppWidget(context, appWidgetManager, appWidgetId); + } + } + + @Override + public void onReceive(Context context, Intent intent) { + super.onReceive(context, intent); + if (intent.getAction().equals(UPDATE_TIME_ACTION)) { + AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, TimeWidget.class)); + for (int appWidgetId : appWidgetIds) { + updateAppWidget(context, appWidgetManager, appWidgetId); + } + } + } + + private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { + if (_Message == null) { + _Message = new ArrayList(); + } + LogUtils.d(TAG, "updateAppWidget(...)"); + + StringBuilder sbLine = new StringBuilder(); +// for (int appWidgetId : appWidgetIds) { +// RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); +// + +// appWidgetManager.updateAppWidget(appWidgetId, views); +// } + + RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); + //设置按钮点击事件 + Intent intent = new Intent(context, WidgetButtonClickListener.class); + PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + views.setOnClickPendingIntent(R.id.widget_button, pendingIntent); + + // 获取当前时间并设置到TextView + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + String currentTime = sdf.format(new Date()); + sbLine.append("["); + sbLine.append(currentTime); + sbLine.append("]"); + _Message.add(0, sbLine.toString()); + while(_Message.size() > 6) { // 控制显示在6行 + _Message.remove(_Message.size() - 1); + } + String message = String.join("\n", _Message); + views.setTextViewText(R.id.timeTextView, message); + appWidgetManager.updateAppWidget(appWidgetId, views); + } +} + diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/WidgetButtonClickListener.java b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/WidgetButtonClickListener.java new file mode 100644 index 0000000..b8d42ad --- /dev/null +++ b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/WidgetButtonClickListener.java @@ -0,0 +1,34 @@ +package cc.winboll.studio.appbase.widgets; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/15 17:20:46 + * @Describe WidgetButtonClickListener + */ +import android.appwidget.AppWidgetManager; +import android.content.BroadcastReceiver; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.widget.RemoteViews; +import android.widget.Toast; +import cc.winboll.studio.appbase.R; + +public class WidgetButtonClickListener extends BroadcastReceiver { + + public static final String TAG = "WidgetButtonClickListener"; + @Override + public void onReceive(Context context, Intent intent) { + AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, TimeWidget.class)); + + for (int appWidgetId : appWidgetIds) { + RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); + views.setTextViewText(R.id.timeTextView, "文本已更新"); + appWidgetManager.updateAppWidget(appWidgetId, views); + } + + Toast.makeText(context, "按钮被点击", Toast.LENGTH_SHORT).show(); + } +} + diff --git a/appbase/src/main/res/layout/widget_layout.xml b/appbase/src/main/res/layout/widget_layout.xml new file mode 100644 index 0000000..1eb4a65 --- /dev/null +++ b/appbase/src/main/res/layout/widget_layout.xml @@ -0,0 +1,32 @@ + + + + + +