Однако Android-ограничения видны в виде обновления в течение каждые 30 минут. /> Чего я хочу достичь:
widget, который: < /p>
является частью приложения .net maui. Реализация AppWidgetProvider с помощью пользовательского действия, которое обновляет отображаемое время при нажатии кнопки. Вот упрощенная версия моего кода: < /p>
Код: Выделить всё
using Android.App;
using Android.Appwidget;
using Android.Content;
using Android.Widget;
using System;
namespace Maui_Widget_Test_App.Platforms.Android.AppWidget
{
[BroadcastReceiver(Label = "Zeit-Widget", Exported = true)]
[IntentFilter(new[] { "android.appwidget.action.APPWIDGET_UPDATE", "com.example.GET_TIME" })]
[MetaData("android.appwidget.provider", Resource = "@xml/my_widget_info")]
public class CounterWidget : AppWidgetProvider
{
public override void OnUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
base.OnUpdate(context, appWidgetManager, appWidgetIds);
foreach (var appWidgetId in appWidgetIds)
{
UpdateWidget(context, appWidgetManager, appWidgetId);
}
}
public override void OnReceive(Context context, Intent intent)
{
base.OnReceive(context, intent);
if (intent.Action == "com.example.GET_TIME")
{
var time = DateTime.Now.ToString("HH:mm:ss");
var appWidgetManager = AppWidgetManager.GetInstance(context);
var thisWidget = new ComponentName(context, Java.Lang.Class.FromType(typeof(CounterWidget)));
var appWidgetIds = appWidgetManager.GetAppWidgetIds(thisWidget);
foreach (var appWidgetId in appWidgetIds)
{
RemoteViews views = new RemoteViews(context.PackageName, Resource.Layout.my_widget_layout);
views.SetTextViewText(Resource.Id.buttonGetTime, time);
// Re-attach button intent
Intent buttonIntent = new Intent(context, Java.Lang.Class.FromType(typeof(CounterWidget)));
buttonIntent.SetAction("com.example.GET_TIME");
var pendingIntent = PendingIntent.GetBroadcast(context, 0, buttonIntent,
PendingIntentFlags.Immutable | PendingIntentFlags.UpdateCurrent);
views.SetOnClickPendingIntent(Resource.Id.buttonGetTime, pendingIntent);
appWidgetManager.UpdateAppWidget(appWidgetId, views);
}
}
}
private void UpdateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId)
{
RemoteViews views = new RemoteViews(context.PackageName, Resource.Layout.my_widget_layout);
Intent buttonIntent = new Intent(context, Java.Lang.Class.FromType(typeof(CounterWidget)));
buttonIntent.SetAction("com.example.GET_TIME");
var pendingIntent = PendingIntent.GetBroadcast(context, 0, buttonIntent,
PendingIntentFlags.Immutable | PendingIntentFlags.UpdateCurrent);
views.SetOnClickPendingIntent(Resource.Id.buttonGetTime, pendingIntent);
appWidgetManager.UpdateAppWidget(appWidgetId, views);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... or-counter