Widget Kode vir Jou Android App: Opdatering van Widgets
Die programd widget bied gebruikers maklike toegang tot die mees gebruikte program funksies, terwyl jou program 'n teenwoordigheid op die gebruiker se tuisskerm bied. Deur widgets by jou projek by te voeg, kan jou 'n beter gebruikerservaring bied, terwyl gebruikers aangemoedig word om betrokke te bly by jou program. Elke keer as hulle na hul tuisskerm kyk, sal hulle jou widgets sien, sommige van jou nuttigste programme en inhoud vertoon. interessant.
In hierdie drie-delige reeks, bou ons 'n program-widget wat al die funksies bevat wat jou byna elke Android-toepassingswedstryd sal vind.
In die eerste pos, we created a widget that retrieves and displays data en voer 'n unieke aksie uit in reaksie op onClick geleenthede. Ons widget mis nog steeds een belangrike stuk funksionaliteit: dit word nooit met nuwe inligting opgedateer nie. 'N widget wat nooit iets nuuts te bied is nie al wat nuttig nie, so ons sal ons widget twee verskillende maniere om te werk.
Kodeer 'n Widget vir Android: Invoer en Vertoon
Teen die einde van hierdie reeks het ons ons dingesie uitgebrei om nuwe data outomaties op te haal en weer te gee op grond van 'n skedule en in reaksie op gebruikersinteraksie.
Ons neem dit presies waar ons opgehou het, so as jou nie 'n kopie van die widget wat ons in die eerste pos geskep het nie, kan jou download it from GitHub.
Opdateer Jou Uitleg
Die eerste stap is om ons uitleg op te dateer om data te wys wat oor tyd verander. Om ons te help om presies te sien wanneer ons dingesie elke opdatering ontvang, gaan ek die dingesie opdrag gee om die huidige tyd te herwin en weer te gee wanneer dit 'n opdatering verrig.
Ek sal die volgende by die widget-uitleg voeg:
'n TextView wat 'n Laaste Update etiket vertoon
'n TextView wat die tyd van die laaste opdatering sal vertoon
Terwyl ons aan die new_app_widget.xml lêer werk, gaan ek ook die TextView byvoeg wat uiteindelik die gebruiker sal toelaat om 'n update handmatig te aktiveer:
Definieer dan die nuwe stringbronne wat ons in ons uitleg verwys:
Die @string/time baie anders as jou gewone snaar, want dit is net 'n plekhouer wat by lukraak vervang sal word.
Dit gee ons die finale uitleg:
Opdateer jou Widget op grond van 'n Bylae
Aangesien dit die maklikste metode is om te implementeer, gaan ek begin met die opdatering van ons dingesie outomaties nadat 'n vasgestelde tydperk verloop het.
By die skep van hierdie soort outomatiese opdateringskedule is 1,800,000 millisekondes (30 minute) die kleinste interval wat jou kan gebruik. Selfs as jou projek se updatePeriodMillis tot minder as 30 minute stel, sal jou widget nog net een keer elke halfuur bywerk.
Besluit hoe gereeld jou dingesie moet werk, is nooit reguit nie. Gereelde opdaterings is 'n groter dreinering op die toestel se battery, maar stel hierdie opdaterings te ver uitmekaar en jou widget kan ophou om beduidende uitgedateerde inligting aan die gebruiker te vertoon.
Om 'n werkbalans vir jou spesifieke projek te vind, moet jou widgets toets by verskillende opdateringsfrekwensies en meet die impak van elke frekwensie op die batteryleeftyd, terwyl jou monitor of die widget-inhoud ooit verouderd is.
Want hoe dikwels is dit dikwels 'n frustrerende en subjektiewe vraag waar daar geen 'regte' antwoord is nie, dit kan help om 'n tweede opinie te kry deur sommige gebruikerstoetse op te stel. Jou kan selfs 'n paar A/B toetse opstel om seker te maak of 'n spesifieke opdateringsfrekwensie meer positief as ander ontvang word.
Open jou projek se AppWidgetProviderInfo lêer (res/xml/new_app_widget_info.xml) en jou sal sien dat dit reeds 'n standaard opdateringsinterval van 86,400,000 millisekondes (24 uur) definieer.
Daar is baie widgets wat elke 24 uur net opgedateer word. Byvoorbeeld, widgets met weervoorspellings mag slegs een keer per dag nuwe inligting ophaal. Selfs as jou widget net een keer per dag moet opdateer, is dit egter nie ideaal wanneer jou program toets nie. Niemand wil 24 uur wag om te sien of hul onUpdate() metode korrek geaktiveer word nie, so jou sal tipies die kortste moontlike interval gebruik wanneer die aanvanklike toets uitgevoer word, en verander dan hierdie waarde later, indien nodig.
Om dit makliker te maak om ons program te toets, gaan ek die kleinste moontlike interval gebruik:
Ontsluit en Kyk Tans die Huidige Tyd
Die metode onUpdate() is verantwoordelik vir die opdatering van jou widget se sienings met nuwe inligting. As jou projek se widget-verskaffer (java/waardes/NewAppWidget.java) oopmaak sal jou sien dat dit reeds die omtrek van 'n onUpdate() metode bevat:
Ongeag of jou dingesie outomaties of as gevolg van gebruikersinteraksie outomaties opdateer, is die opdateringsproses presies dieselfde: die widgetbestuurder stuur 'n uitsaai-voorneme met die ACTION_APPWIDGET_UPDATE aksie. Die widget verskaffer klas reageer deur die metode onUpdate() te noem, wat op sy beurt noem die updateAppWidget() helper metode.
Sodra ons ons NewAppWidget.java klas opgedateer het om die huidige tyd op te haal en te vertoon, sal ons projek dieselfde kode gebruik, ongeag hoe die onUpdate() metode geaktiveer word:
Daar is een probleem met die bogenoemde kode: as die gebruiker die TextView verskeie kere in 'n minuut sny, sal daar geen visuele aanduiding wees dat die dingesie opgedateer het nie, bloot omdat daar geen nuwe tyd is om te vertoon nie. Dit sal waarskynlik nie vir jou eindgebruikers probleme veroorsaak nie, wat onwaarskynlik is om daar te sit, tik die TextView verskeie kere per minuut en wonder waarom die tyd nie verander het nie. Dit kan egter 'n probleem wees wanneer jou program toets, aangesien dit beteken dat jou minstens 60 sekondes moet wag tussen die onUpdate() metode.
Om te verseker dat daar altyd 'n soort visuele bevestiging is dat die metode onUpdate() suksesvol geloop het, gaan ek 'n roosterbrood vertoon wanneer onUpdate() genoem word:
Opdateer Jou Widget in Antwoord op Gebruiker Aksie
Ons widgets sal nou outomaties elke halfuur bywerk, maar wat van opdatering as gevolg van gebruikersinteraksie?
Ons het baie grondslag geskep deur by te voeg 'n Tik om Update TextView by te werk in ons uitleg en brei uit NewAppWidget.java klas om die huidige tyd te herhaal en vertoon elke keer opUpdate() word genoem.
Die enigste ding wat nog te doen is om 'n voorneme te maak met AppWidgetManager.ACTION_APPWIDGET_UPDATE, wat is 'n aksie wat die dingesie vertel dat dit tyd is om te werk, en dan noem hierdie bedoeling in reaksie op die gebruiker wat met Tap to Update TextView.
Hier is die voltooide NewAppWidget.java klas:
Om 'n widget op aanvraag te kan bywerk kan van onskatbare waarde wees wanneer jou projek toets, aangesien dit beteken dat jou nooit moet wag vir die opdateringsinterval om te verval nie. Selfs as jou nie hierdie funksionaliteit in jou voltooide aansoek insluit nie,Jou kan dalk 'n rukkie byvoeg Tap to Update knoppie, net om jou lewe makliker te maak wanneer jou projek toets.
Skep 'n Voorskou Prent
Ons widget lyk nou heeltemal anders as die widget wat Android Studio outomaties vir ons gegenereer het, maar tans gebruik dit steeds die outomaties gegenereerde voorskoubeeld.
Ideaal gesproke moet jou voorskouprent gebruikers aanmoedig om jou dingesie uit die Widget Picker te kies, maar dit moet ten minste 'n akkurate voorstelling wees van hoe jou widget eintlik lyk! Tans word ons voorskoue van die prentjie gemerk niks die bokse, so ons moet 'n nuwe een maak.
Die maklikste metode is om die Widget Preview program wat in die Android emulator ingesluit is te gebruik.
Skep 'n Widget Voorskou
Eerstens, installeer jou projek op 'n Android Virtual Device (AVD). Open dan die AVD se programlêer en begin die Widget Preview aansoek. Die AVD sal 'n lys vertoon van elke program wat op die toestel geïnstalleer is - kies jou program uit die lys.
Jou widget sal op 'n leë agtergrond vertoon word. Spandeer 'n rukkie van die grootte van die grootte en pas jou widget so dat dit sy beste lyk. As jou tevrede is met die resultate, kies Neem snapshot. Die skermkiekie sal gestoor word as 'n PNG in die aflaai kant van die AVD. Om hierdie lêer te herwin, skakel terug na Android Studio en open die Apparaatlêer Explorer, deur View> Tool Windows> Device File Explorer uit die nutsbalk te kies. In die Apparaatlêer Explorer-vertoning, navigeer na die sdcard/aflaaimap, waar jou die voorskouprentjie gestoor word as [app_name] _ori_ [orientation] .png.
Sleep hierdie prentjie uit Android Studio en laat dit iewers maklik toeganklik wees, soos jou lessenaar. Gee die prentjie 'n meer beskrywende naam en sleep dan die prentjie in die tekenbare gids van jou projek. Nou kan jou die AppWidgetProviderInfo lêer oopmaak (in hierdie geval, dit is new_app_widget_info.xml) en verander die volgende reël om jou nuwe voorskouprent te verwys:
Ten slotte kan jou die onnodige example_appwidget_preview verwyder wat uit jou projek getrek word.
Toets jou Widget
Dit is tyd om die finale widget aan die toets te sit!
Eerstens, installeer die opgedateerde projek op jou fisiese Android-toestel of AVD. Verwyder alle bestaande gevalle van hierdie widget uit jou tuisskerm, sodat jou weet jou werk met die nuutste weergawe.
Om jou dingesie by te voeg, druk enige leë spasie op die tuisskerm, tik Widget, en kies dan jou widget. Jou sal 'n kans kry om die widget te verander en te plaas, soos nodig.
Die Laaste Update waarde sal die tyd wys waarop jy hierdie dingesie geskep het. Druk Tik om op te Dateer en die dingesie moet 'n roosterbrood en 'n nuwe tyd vertoon. As jou 'n tweede instansie van die widget op jou tuisskerm plaas, moet dit 'n ander tyd vir die eerste een vertoon.
Jou kan een voorbeeld van hierdie widget bywerk deur dit toe te staan Tap to Update TextView 'n kraan. As jou 'n handleiding vir die eerste widget aktiveer, sal die tweede dingetjie nie opgedateer word nie, en andersom.
Bykomend tot handleiding bywerkings, sal die App Widget Manager elke keer elke 30 minute alle gevalle van jou widget opdateer, gebaseer op die tyd wanneer jy die eerste keer geskep het. Alhoewel handleiding-opdaterings kan lei tot die vertoon van verskillende tye, sal elke keer elke halwe uur alle gevalle gelyktydig opgedateer word, en op dieselfde tyd sal hulle dieselfde tyd vertoon.
Jou kan dalk 'n paar voorbeelde van hierdie widget op jou tuisskerm hou, sodat jou kan monitor hoe hul inhoud oor tyd verander in reaksie op 'n kombinasie van outomatiese en handleiding updates.
In hierdie reeks, het ons 'n Android-programmengsel geskep wat jou wys hoe om al die algemeenste kenmerke wat in die programmengsel gevind word, toe te pas. As jou vanaf die begin gevolg het, dan het jy op hierdie stadium widgets opgebou wat outomaties opgedateer word en in reaksie op gebruikers terugvoering. Dit is ook moontlik om te reageer op OnClick-geleenthede (jou kan ook download the complete project from GitHub).
In die volgende plasing gaan ons kyk na 'n paar beste praktyke om te verseker dat jou widgets 'n goeie gebruikerservaring bied, en hoe om jou widgets met konfigurasieaktiwiteit te verbeter.
Wat is Android Instant App?
Skep Android Toeganklike Aansoeke
Skep 'n Materiaal Ontwerpspaarkoppelvlak in Android App
Vinnige Wenk: Skep 'n Custom Quick Tile vir Android