device: fenix 6, ciq 3.2.4, fw 15.71
the code (no code format - forum error as usually) below not start background (either with Duration or TMoment in registerForTemporalEvent)
///app
using Toybox.Application as APP;
using Toybox.WatchUi as UII;
using Toybox.Background as BAG;
using Toybox.System as SYS;
using Toybox.Time as TIM;
(:background)
class batteryusageSD extends SYS.ServiceDelegate
{
function initialize()
{
ServiceDelegate.initialize();
}
function onTemporalEvent()
{
if(APP.getApp().getProperty("BAGkill"))
{
SYS.println("onTemporalEvent kill BAG");//not call on sim
BAG.exit(null);
}else
{
SYS.println("onTemporalEvent keep BAG");
BAG.exit(true);
}
}
}
(:background)
class batteryusageApp extends APP.AppBase
{
var mV;
function initialize()
{
AppBase.initialize();
}
// onStart() is called on application start up
function onStart(state)
{
}
// onStop() is called when your application is exiting
function onStop(state)
{
}
// Return the initial view of your application here
function getInitialView()
{
mV = new batteryusageView();
return [ mV, new batteryusageDelegate() ];
}
function getServiceDelegate()
{
return [new batteryusageSD()];
}
function startBAG()
{
setProperty("BAGkill", false);
//BAG.registerForTemporalEvent(new TIM.Duration(300));
var let = BAG.getLastTemporalEventTime();
if(let)
{
let = let.add(new TIM.Duration(300));
} else
{
let = TIM.now().add(new TIM.Duration(15));
}
BAG.registerForTemporalEvent(let);
}
function stopBAG()
{
setProperty("BAGkill", true);
BAG.deleteTemporalEvent();
}
function onBackgroundData(d)
{
SYS.println("onBackgroundData");
if(mV)
{
setProperty("IsMV", true);
mV.onMeasureTMR("a.onBackgroundData");
}else
{
setProperty("IsMV", false);
UII.requestUpdate();
}
}
}
//delgate
using Toybox.WatchUi as UII;
using Toybox.Application as APP;
class batteryusageDelegate extends UII.BehaviorDelegate {
function initialize()
{
BehaviorDelegate.initialize();
}
function onMenu()
{
UII.pushView(new Rez.Menus.MainMenu(), new batteryusageMenuDelegate(), WatchUi.SLIDE_UP);
return true;
}
function onSelect()
{
return APP.getApp().mV.onSelect();
}
function onBack()
{
return APP.getApp().mV.onBack();
}
function onNextPage()
{
UII.requestUpdate();
}
function onPreviousPage()
{
UII.requestUpdate();
}
}
//view
using Toybox.WatchUi as UII;
using Toybox.Timer as TMR;
using Toybox.Time.Gregorian as GRE;
using Toybox.Time as TIM;
using Toybox.Graphics as GRA;
using Toybox.Math as MAT;
using Toybox.System as SYS;
using Toybox.Background as BAG;
using Toybox.Application as APP;
class batteryusageView extends UII.View
{
var mDrawNumTMR, mDrawNumTOT = 0 ,
//mTMR,
mIsMeasuring = false, mMeasureStartTIM, mMeasureStartBAT;
function initialize()
{
View.initialize();
//mTMR = new TMR.Timer();
APP.getApp().setProperty("IsMV", null);
}
function onLayout(dc)
{
//prv(me, "onLayout");
// setLayout(Rez.Layouts.MainLayout(dc));
return true;
}
function getCurrentData()
{
return [MAT.floor(SYS.getSystemStats().battery), new TIM.Moment(TIM.now().value())];
}
function onBack()
{
tmrStop();
return false;//exit app
}
function onMeasureTMR(from)
{
SYS.println("onMeasureTMR, from: " + from);
mDrawNumTMR++;
requestUpdate();
}
function tmrStart()
{
mIsMeasuring = true;
var c= getCurrentData();
mMeasureStartBAT = c[0];
mMeasureStartTIM = c[1];
mDrawNumTMR = 0;
APP.getApp().startBAG();
// mTMR.start(
// method(:onMeasureTMR),
// 1000*60,
// true);
onMeasureTMR("v.onSelect tmr.start");
}
function tmrStop()
{
mIsMeasuring = false;
//mTMR.stop();
APP.getApp().stopBAG();
onMeasureTMR("v.onSelect tmr.stop");
}
function onSelect()
{
if(mIsMeasuring)
{
tmrStop();
}else
{
tmrStart();
}
return true;
}
function onUpdate(dc)
{
dc.setColor(GRA.COLOR_TRANSPARENT, GRA.COLOR_BLACK);
dc.clear();
var f = GRA.FONT_SYSTEM_TINY;
var t;
var c= getCurrentData();
if(mMeasureStartTIM)
{
dc.setColor(GRA.COLOR_BLUE, GRA.COLOR_TRANSPARENT);
dc.drawText(130,90, f, "mDrawNumTMR=" + mDrawNumTMR, GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
var m = (c[1].value() - mMeasureStartTIM.value())/60;
var T = (m / 60).format("%02d") + ":" + (m % 60).format("%02d");
t = GRE.info(mMeasureStartTIM, TIM.FORMAT_SHORT);
t = t.year + "-" + t.month.format("%02d") + "-" + t.day.format("%02d") + " " +
t.hour.format("%02d") + ":" + t.min.format("%02d") + ":" + t.sec.format("%02d") + " " + T;
dc.drawText(130, 110, f, t, GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
t = c[0] - mMeasureStartBAT;
m = m ? ((c[0] - mMeasureStartBAT)/m.toFloat()).format("%.2f") : 0;
dc.drawText(130, 130, f, "BatSta=" + mMeasureStartBAT.format("%.0f") + "% " + m + "%/min", GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
}
dc.setColor(GRA.COLOR_GREEN, GRA.COLOR_TRANSPARENT);
dc.drawText(130,20, f, "IsMV=" + APP.getApp().getProperty("IsMV"), GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
mDrawNumTOT++;
dc.setColor(GRA.COLOR_YELLOW, GRA.COLOR_TRANSPARENT);
dc.drawText(130,190, f, "mDrawNumTOT=" + mDrawNumTOT, GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
t = GRE.info(c[1], TIM.FORMAT_SHORT);
t = t.year + "-" + t.month.format("%02d") + "-" + t.day.format("%02d") + " " +
t.hour.format("%02d") + ":" + t.min.format("%02d") + ":" + t.sec.format("%02d");
dc.drawText(130, 210, f, t, GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
dc.drawText(130, 230, f, "BatCur=" + c[0].format("%.0f") + "%", GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
return true;
}
}