dmylogi.com

Hoe om kennisgewings op Android Lollipop te skep

Is jy `n Android-ontwikkelaar en wil jy leer hoe om kennisgewings in jou aansoek te skep? Dan is hierdie handleiding vir jou. Ons wys jou hoe om eenvoudige kennisgewings te skep, stel aksies vir gebruiker kennisgewings, verwyder, en op te dateer kennisgewings, gebruik vordering bars binne hulle, skep maniere om die inhoud daarvan te brei, te vermy teenstrydighede in die gebruiker navigasie en nog baie meer.

Die artikel sal gebaseer wees op a aansoek voorbeeldoproep Notimax, wat uit `n lys van items bestaan, waar ons elkeen `n kennisgewing met `n spesifieke funksie na die gebruiker sal sien. Ons sal sien hoe om vennootgebeurtenisse te bou terwyl u deur die agenda beweeg, voorbeeldkodes en illustrasies in ag neem.


stappe

1
Wees duidelik oor die konsep van kennisgewings op Android. Kennisgewings is visuele hulpmiddels om jou te laat weet oor belangrike gebeure wat plaasgevind het terwyl jy nie die koppelvlak van jou aansoeke gekyk het nie. Byvoorbeeld, die toepassing van gmail stuur kennisgewings in die eksterne koppelvlak van Android om in te lig dat `n nuwe e-pos vanaf `n kontak aangekom het. Dit laat jou toe om vinnig toegang tot die kennisgewing te kry om te sien wat gebeur het of selfs onmiddellik besluit watter stappe in die vraag gestel word.
  • Kennisgewings word vir die eerste keer in die Kennisgewinggebied in die vorm van `n ikoon, wat beskrywend genoeg moet wees om intuïtief te identifiseer wat gebeur.
Android-kennisgewings-area.jpg" klas ="beeld ligkas">
Prent getitelde Android kennisgewings area.jpg
  • Om die besonderhede van die kennisgewing te sien, sleep net die kennisgewings laai af. Dit sal die opgehoopte kennisgewings tot dusver wys:
    Android-kennisgewings-drawer.jpg" klas ="beeld ligkas">
    Prent getitelde Android kennisgewings drawer.jpg
  • Android-kennisgewings-anatomia.jpg" klas ="beeld ligkas">
    Prent getitelde Android kennisgewings anatomia.jpg
    2
    Kom meer te wete oor die ontwerp van `n kennisgewing. Kennisgewings op Android bestaan ​​uit 4 hoof dele: Die titel van die kennisgewing, a inhoud of boodskap, die icon verteenwoordiger van die aansoek en a tydstempel van voorkoms Jy kan egter meer elemente byvoeg, soos `n foto langs die gekombineerde ikoon, `n nommer wat kwantitatief verteenwoordig die hoeveelheid soortgelyke kennisgewings gegroepeer, aksie knoppies, ens.
  • Skep die ikoon vir jou kennisgewing met Android Studio. Android Studio het `n ikoonskeppingsinstrument van grafiese hulpbronne persoonlike. Om kennisgewingikone te skep, gaan eenvoudig na die gids tekenbaar van jou bronne, druk regs kliek, kies die opsie nuwe en kies Beeldbate.
    Android-ateljee-beeld-asset.jpg" klas ="beeld ligkas">
    Prent getiteld Android studio image asset.jpg
  • Dit sal jou `n instrument genaamd Asset Studio wys, waar jy `n reeks konfigurasies sal vind om die basisbron van jou ikone te kies.
    Android-ateljee-bate-studio.jpg" klas ="beeld ligkas">
    Prent getiteld Android studio bate studio.jpg
  • Gaan na die bate-tipe-opsie en kies die opsie Notifikasie ikone om na die kennisgewing tipes te verwys. Onmiddellik towenaar sal instel van die huidiglik gekose hulpbron is die aansoek ikoon by verstek, die vorm van `n ikoon kennisgewing neem (die gids sê Android ikonografie behoort 24dp x24dp wees stylvol wit plat).
    Android-kennisgewing-icons.jpg" klas ="beeld ligkas">
    Prent getiteld Android-kennisgewing-ikone.jpg
  • Kies nou die png-prent wat u in die opsie ontwerp het Prentlêer. U kan ook die naam in die opsie verander Hulpbron Naam. Sodra die bronstruktuur gekonfigureer is, druk jy volgende. Dit sal `n towenaar wys wat die tekenbare dopgehou wat jy dink nodig is om die kennisgewingikone op Android-platforms te ondersteun wat spesiale behandeling benodig.
    Kennisgewing-ikone-Android-versiones.jpg" klas ="beeld ligkas">
    Prent getiteld Kennisgewing ikone android versionses.jpg
  • pers afwerking en jy sal jou ikone gereed hê om toegang tot hulle te kry.
  • 3
    Skep `n nuwe projek in Android Studio. Die eerste ding wat jy sal doen, is om `n nuwe projek in Android Studio te skep. Vir dit, gaan na lêer >Nuwe Projek ... en dui aan dat jy `n hoof aktiwiteit leeg (Leë Aktiwiteit). Voltooi en gaan voort na die volgende stap.
  • 4
    Skep `n lys en `n eenvoudige adapter. Die ontwerppatroon van jou aktiwiteit is gebaseer op a script lys Dit sal verskeie opsies bied om kennisgewings aan die stelsel uit te reik. Omdat die ontwerp van elke item van die lys dit is eenvoudig (`n enkele TextView), dan kan jy `n voorbeeld van a skep ArrayAdapter dat jy `n reëling van Strings met jou opsies.
  • Om hierdie voorwaardes duidelik te maak, bestaan ​​die ontwerp van jou hoofaktiwiteit uit `n wortelknoop die tipe :
  • Nou moet jy net die lys kry en ons eenvoudige adapter skep. Kom ons kyk:

    ...private ArrayAdapter adapter-private script lys lys -... @ Overrideprotected leemte OnCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -setContentView (R.layout.activity_main) - // Kry listalist = (script lys) findViewById (R.id .list) - // Skep inhoud uit die itemsString items [] = {"Eenvoudige kennisgewing","Kennisgewing + Aksie","Kennisgewing + Update","Kennisgewing + Kennisgewing","Kennisgewing + Vordering","Gepersonaliseerde kennisgewing","Big View-kennisgewing"} - // Skep adaptadoradapter = nuwe ArrayAdapter(Dit android.R.layout.simple_list_item_1, items) - // Bring tot listalist.setAdapter adapter (adapter) -list.setOnItemClickListener (hierdie) -}

    Soos notas is hierdie stap eenvoudig en intuïtief. Kom ons gaan voort.

    Deel 1
    Genereer `n eenvoudige kennisgewing vir die eerste item in die lys

    Nou sal jy begin om elke kennisgewing te maak om te studeer. Elkeen sal uitgevoer word wanneer die ooreenstemmende item in die lys gedruk word. Dit beteken dat jy die metode moet oorskryf onItemClick () van die koppelvlak OnItemClickListener met `n veelvoudige seleksiestruktuur om elke element te valideer. Die volgende is die algemene skema:

    @Overridepublic void onItemClick (AdapterView
    1
    Kennisgewings word deur die java-klas in die Android API voorgestel kennisgewing, maar om die verenigbaarheid met vorige weergawes te handhaaf, sal ons die klas gebruik NotificationCompat.
    • Die skepping van kennisgewings is baie makliker as die geneste klas gebruik word bouer, aangesien dit toelaat om die basiese waardes van `n kennisgewing sonder voorafgaande opset deur die programmeerder in te stel. Daarbenewens moet u van `n komponent van die stelsel gebruik maak NotificationManager, wat verantwoordelik is vir die bestuur van die uitreiking van u kennisgewings.
  • 2
    Om te begin, sal jy `n metode genaamd skep kennisgewing1 (). Die doel is om `n eenvoudige kennisgewing op te stel, wat die gebruiker inlig dat `n nuwe artikel van `n webblad bestaan.
  • openbare leemte notification1 (int id, int IconId, String titel, String inhoud) {NotificationCompat.Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setLargeIcon (BitmapFactory.decodeResource (getResources (), R.drawable.girl_avatar_48x48 .)) setContentTitle (titel) .setContentText (inhoud) .setColor (getResources () getColor (R.color.Dark)) -. // Bou die kennisgewing en emitirlanotifyMgr.notify (id, builder.build ()) -}

    Die vorige metode ontvang as parameters die id van die kennisgewing in die stelsel. Met hierdie nommer kan jy jou teenwoordigheid van ander kennisgewings onderskei om direk daarop te handel. Die volgende parameter IconId, is die tekenbare kode wat die kennisgewingikoon sal verteenwoordig. Die derde en vierde parameters is die titel en inhoud van die kennisgewing onderskeidelik.


    Met die parameters gebruik ons ​​eenvoudig stel metodes (setSmallIcon () vir die ikoon, setLargeIcon () vir die foto, setContentTitle () vir die titel, setContentText () vir die inhoud of boodskap en setColor () vir die ikoon agtergrond) om die waardes te verander in `n nuwe instansie van bouer. Dan los jy die kennisgewing aan die stelsel met die metode stel in kennis () van die NotificationManager. Dit ontvang die id van `n nuwe kennisgewing en die kennisgewing wat geproduseer word wanneer die metode gebruik word bou () van Bouwer.


    Die volgende stap is om die metode van konstruksie van die kennisgewing binne te roep onItemClick (), verwant aan die uitvoering aan die eerste element:

    @Overridepublic void onItemClick (AdapterView

    Deel 2
    Skep `n kennisgewing met `n aksie vir die tweede item



    Die vorige kennisgewing, hoewel dit uitgereik is, het nie `n toegewysde aksie wanneer dit deur die gebruiker gedruk word om na die ooreenstemmende aktiwiteit te gaan nie. Om hierdie probleem op te los, sal ons dus `n voorbeeld van die klas gebruik PendingIntent.


    PendingIntent is `n klas wat die data van a bevat bedoeling en die aktiwiteit wat sal begin wanneer die kennisgewing gedruk word. Dit om die voornemende inligting in die stelsel op te slaan terwyl die gebruiker besef dat hy `n nuwe kennisgewing het. Daarbenewens word die interaksie data beskerm as ons aansoek gesluit word.


    Volgende sal ons `n nuwe metode genaamd skep kennisgewing2 () Om dieselfde kennisgewing nou te vertoon, maar met `n aksie wat `n toetsaktiwiteit oopmaak.

    openbare leemte notification2 (int id, int IconId, String titel, String inhoud) {// Skep die builderNotificationCompat.Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setLargeIcon (BitmapFactory.decodeResource (getResources (), R . .drawable.girl_avatar_48x48)) setContentTitle (titel) .setContentText (inhoud) .setColor (getResources () getColor (R.color.Dark)) -. // nuwe geval van voorneme wys na EslabonIntent opset = nuwe voorneme (hierdie, Eslabon CLASS) - // Skep pilaTaskStackBuilder StackBuilder = TaskStackBuilder.create (hierdie) - // Voeg aktiwiteit padrestackBuilder.addParentStack (Eslabon.class) - // Verwysingstegnieke voorneme vir notificaciónstackBuilder.addNextIntent (bedoeling) - // Kry PendingIntent as gevolg van die pilaPendingIntent stackBuilder.getPendingIntent resultPendingIntent = (0, PendingIntent.FLAG_UPDATE_CURRENT) - // Opdrag hangende intentbuilder.setContentIntent (resultPendingIntent) - // Verwyder kennisgewing om met ellabuilder.setAutoCan cel (waar) - // Bou die kennisgewing en emitirlanotifyMgr.notify (id, builder.build ()) -}

    Die gevalle van PendingIntent moet geskep word met die statiese metode getActivity () as dit nodig is om `n aktiwiteit te begin. Hierdie metode ontvang die konteks van die aansoek, `n reaksie-identifiseerder, die ooreenstemmende bedoeling en sommige vlae om die gedrag te spesifiseer.


    U kan ook die metode gebruik setAutoCancel () Om die kennisgewing te vertel om te sluit wanneer dit gedruk word.


    Dit is ook moontlik om dienste te begin met getService (), brodcasts met getBroadCast () of selfs verskeie voornemens wat met verskeie aktiwiteite verband hou, uitvoer getActivities ().


    Nou gaan ons die metode aan kennisgewing2 () binne onItemClick ():

    geval 1: kennisgewing2 (2, R.drawable.ic_stat_msg,"Ximena Claus",": D Ek het reeds die nuwe logo!") -break-

    Deel 3
    Verseker dat die werkstroom in navigasie tussen aktiwiteite gehandhaaf word

    Daar is `n aspek wat ons nie kan verwaarloos wanneer u `n nuwe aktiwiteit van `n aktiwiteit begin nie, en dit is die behoud van navigasie. U moet definieer of die aktiwiteit wat vanaf die kennisgewing begin, `n logiese agteruitvolgorde moet volg of bloot verklaar dat dit nie gekoppel sal wees aan enige werkvloei nie.


    Stel jou voor dat `n diens uit jou aansoek `n kennisgewing oor `n nuwe verkoop uitgereik het. Druk vinnig die kennisgewing om die besonderhede van hierdie inligting te sien. Sodra jy binne die aktiwiteit is, kan jy die nodige data vir jou sien ... maar wat gebeur as jy op die knoppie druk terug van jou selfoon of die knoppie up van die aksie balk?, Moet u aansoek gerig word aan die huis of bloot die afwyking ontken?


    Om dit te besluit moet jy na die volgende twee definisies gaan:

    • Gereelde aktiwiteit: Dit word gegenereer wanneer ons die normale terugwaartse gedrag in die program se werkstroom wil behou. Dit beteken dat wanneer die aktiwiteit begin, dit ons moontlik maak om met die terugknoppies opwaarts te opgevolg, as dit `n oueraktiwiteit het en aan `n ketting behoort.
    • Spesiale aktiwiteit: Hierdie tipe aktiwiteite behoort nie aan `n werkstroom binne die aansoek nie, maar word geskep om in detail of verleng te vertoon, die gebeurtenis wat die kennisgewing aangedui het. As gevolg hiervan is dit nie nodig om die knoppie te gebruik nie up om na die huis of enige ander ouer aktiwiteit in die aansoek.

    Deel 4
    Gebruik `n Hangende Instelling vir `n gereelde aktiwiteit

    Kom ons kyk watter stappe om te volg om `n gereelde aktiwiteit te skep:


    1. Verklaar `n ouer-aktiwiteit om dit aan `n navigasieketting te bind.


    Soos ons reeds gesien het, is dit nodig om in die metadata van die manifes aan te dui dat die gereelde aktiwiteit `n pa sal hê. Hiervoor word `n nuwe aktiwiteit genoem Eslabon, wat gekoppel is aan MainActivity met die volgende XML-verklaring:

    android: parentActivityName =".MainActivity" >




    2. Skep `n backspace-stapel om die navigasie te bewaar


    Om `n verwysing te maak van die hiërargie wat bestaan ​​tussen MainActivity en Eslabon ons sal die klas gebruik BackStackBuilder, wat toelaat om `n agteruitvolgorde te simuleer om kruisnavigasie te handhaaf.


    Kom ons kyk hoe om dit te doen:


    2.1 Initialiseer die stapel met die statiese metode BackStackBuilder.create () met betrekking tot die huidige konteks:

    // Skep stackTaskStackBuilder stackBuilder = TaskStackBuilder.create (this) -




    2.2 Voeg die ouer aktiwiteit by die stapel by die metode addParentStack (). Ontvang as parameter die aktiwiteit waartoe u u vader wil onttrek.

    // Voeg ouer aktiwiteitBuilder.addParentStack (DetailNotification.class)




    2.3 Genereer verwysing na die stapel vir die bedoeling wat die aktiwiteit wat met die kennisgewing verband hou, sal inisieer. Hiervoor sal ons die metode gebruik addNextIntent (), wat die bedoeling ontvang om die aktiwiteit te begin:

    // Referentie Voorneme vir kennisgewingstackBuilder.addNextIntent (bedoeling) -




    2.4 Verkry die PendingIntent as gevolg van die stapel van retracements deur die metode getPendingIntent (). Dan verwant jy die resultaat met setContentIntent () in die kennisgewing.

    // Kry PendingIntent as gevolg van pilaPendingIntent stackBuilder.getPendingIntent resultPendingIntent = (0, PendingIntent.FLAG_UPDATE_CURRENT) - // Opdrag hangende intentbuilder.setContentIntent (resultPendingIntent) -




    Ten slotte sal die kode vir die nommer kennisgewing soos volg wees:

    openbare leemte notification2 (int id, int IconId, String titel, String inhoud) {// Skep die builderNotificationCompat.Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setContentTitle (titel) .setContentText (inhoud) - / / New geval van voorneme wys na EslabonIntent opset = nuwe voorneme (hierdie, Eslabon.class) - // Skep pilaTaskStackBuilder StackBuilder = TaskStackBuilder.create (hierdie) - // Voeg aktiwiteit padrestackBuilder.addParentStack (Eslabon.class) - // Verwysingstegnieke voorneme vir notificaciónstackBuilder.addNextIntent (bedoeling) - // Kry PendingIntent as gevolg van pilaPendingIntent stackBuilder.getPendingIntent resultPendingIntent = (0, PendingIntent.FLAG_UPDATE_CURRENT) - // Opdrag hangende intentbuilder.setContentIntent (resultPendingIntent) - // Verwyder kennisgewing om met ellabuilder .setAutoCancel (ware) - // Bou die kennisgewing en emitirlanotifyMgr.notify (id, builder.build ()) -} -



    Deel 5
    Gebruik `n Hangende Instelling vir `n Spesiale Aktiwiteit

    Hierdie gedrag is baie makliker om te implementeer, aangesien dit nie nodig is om `n backspace-stapel te skep om `n werkstroom te rekonstrueer nie.


    Kom ons kyk hoe om hierdie situasie aan te spreek:


    Stap 1. Voeg die volgende eienskappe by die spesiale aktiwiteit in die AndroidManifiest.xml om stunt take te vermy:

    • Android: launchMode ="singleTask": Hierdie kenmerk verteenwoordig die manier waarop `n aktiwiteit deur `n voorneme geïnitialiseer word. die waarde singleTask bepaal dat die aktiwiteit slegs in `n taak geïnisieer kan word, dus dit kan nie twee keer of meer gekonfronteer word nie.
    • Android: taskAffinity ="": Dui die verstek taak aan waarmee die aktiwiteit kan wissel. Omdat ons nie wil hê dat u deelneem aan enige aktiwiteite wat tot dusver tot dusver begin is nie, gebruik ons ​​`n leë string.
    • android: excludeFromRecents ="waar": Sluit nuwe taak uit waarvoor die aktiwiteit behoort aan die onlangse take waarmee die gebruiker kan navigeer. Dit voorkom dat die aktiwiteit per ongeluk in `n ander taak verskyn.

    Die definisie vir ons aktiwiteit DetalleNotificacion sou wees:

    Stap 2. Skep die PendingIntent gewoonlik. Dit is nodig dat jy byvoeg bedoeling het die vlae geproduseer FLAG_ACTIVITY_NEW_TASK en FLAG_ACTIVITY_CLEAR_TASK sodat die aktiwiteit in `n nuwe taak geskep word.

    // nuwe geval van voorneme wys na DetalleNotificacionIntent opset = nuwe Voorneme (hierdie, DetalleNotificacion.class) - // vlae aan die activivdadintent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK) isoleer Voeg -PendingIntent pendingIntent = PendingIntent.getActivity (hierdie, 0, opset, PendingIntent.FLAG_UPDATE_CURRENT) -

    Deel 6
    Leer om kennisgewings vir die derde item te verander

    Deur `n kennisgewing te verander, kan die struktuur herwin word as `n kennisgewing van dieselfde tipe verwerk moet word. Geen vreemde metodes word gebruik om die eienskappe van `n kennisgewing te verander nie. Jy kan die vorige eienskappe eenvoudig oorskryf met die nuwes.


    Om hierdie eienskap te visualiseer, is item 3 van ons lys geskep. Hierdie kennisgewing, hoewel staties, weerspieël die update duidelik. Die doel is om te waarsku dat `n boodskap het gekom vanaf `n sender wanneer die item is gedruk die eerste keer, maar as druk `n tweede keer, sal altwee groep boodskappe in `n enkele boodskap op te som die gebeure. Kom ons kyk:

    publieke leemte kennisgewing3 () {String GRUPO_NOTIFICACIONES = "soortgelyke kennisgewings"-Notifikasie kennisgewing - / Kyk of die itemif reeds gedruk is (! SecondVez) {notification = new NotificationCompat.Builder (this) .setContentTitle ("Boodskap Nuwe"). SetSmallIcon (R.drawable.ic_stat_msg) .setContentText ("Carlos Cranberry Waar is jy?") .setColor (getResources () getColor (R.color.Dark)) setVisibility (NotificationCompat.VISIBILITY_PUBLIC) .build () - .. // aktiveer banderasegundaVez =} anders {ware-kennisgewing = nuwe NotificationCompat.Builder (hierdie). setContentTitle ("2 nuwe boodskappe") .setSmallIcon (R.drawable.ic_stat_msg) .setNumber (2) .setColor (getResources (). GetColor (R.color.Dark)). SetStyle (nuwe NotificationCompat.InboxStyle (). AddLine ("Carlos Cranberry As jy dit gesien het?") .addLine ("Ximena Claus Nuwe logo ontwerp") .setBigContentTitle ("2 nuwe boodskappe")). setGroup (GROUP_NOTIFICATIONS) .setGroupSummary (true) .build () -} notifyMgr.notify (3, notification) -}

    In die vorige kode is daar baie interessante dinge wat jy moet verstaan:

    • Kennisgewings kan wees geklassifiseer deur die groepe onderskei deur `n spesifieke etiket. In ons geval verklaar ons `n etiket genoem GRUPO_NOTIFICACIONES, wat toegewys moet word met setGroup (). Daarbenewens kan u aan die stelsel aandui dat ons die inhoud van `n groep kennisgewings in een sal opsom, dit word met die metode gedoen. setGroupSummary (). Wat sal verhoed dat hulle afsonderlik uitgereik word.
    • Toe die kennisgewing uitgereik is, het die id 3 ongeag of die item een ​​of twee keer gedruk is. Dieselfde identifiseerder verseker die wysiging van dieselfde koppelvlakruimte.
    • Kennisgewings kan gestileer word deur die metode setStyle (), wat `n vooraf gedefinieerde styl kry soos dit is InboxStyle, wat u toelaat om `n lys elemente by die kennisgewing by die metode by te voeg addLine (), daarom spring `n twee elemente met die ruimte.

    Deel 7
    Verwyder kennisgewings wanneer jy dit nodig ag

    Die kennisgewings kan verwyder word van koppelvlak a deur `n effense sleep na die kante van die kennisgewing in die kennisgewinglaaier. U kan ook die knoppie druk vir die verwydering van "alle" kennisgewings:

    Android-Kennisgewing-remover.jpg" klas ="beeld ligkas">Prent getitelde Android-kennisgewing remover.jpg

    Ons het ook gesien dat die metode gebruik kan word setAutoCancel () om aan te dui dat dit verdwyn wanneer dit gedruk word. Maar dit is ook moontlik om dit met die metodes te verwyder kanselleer () en kanselleerAlle ():

    // Gebruik die ID om `n kennisgewing te kanselleer in particularnotifyMgr.cancel (id) -... // Kanselleer alle kennisgewingsnotifyMgr.cancelAll () -

    kanselleer () tree slegs op vir `n kennisgewing met `n spesifieke ID in teenstelling met kanselleerAlle () wat kanselleer al die kennisgewings wat voorheen getoon is.

    Deel 8
    Skep `n kennisgewing wat uitbrei vir die volgende item

    Kennisgewings het die vermoë om hul inhoud uit te brei as `n styl genoem word BigTextStyle, wat die detail van die inhoud teks kan uitbrei. Daarbenewens kan dit aangevul word deur `n onderste gedeelte met aksieknoppies by te voeg om die reaksie op die gedetailleerde gebeurtenis te beheer.

    Android-kennisgewings-expandidas.jpg" klas ="beeld ligkas">
    Prent getiteld Android kennisgewings expanded.jpg

    Die normale aansig moet altyd die prioriteit wees om te implementeer, aangesien die meeste gebruikers `n eenvoudige kraan gebruik om toegang tot die kennisgewing te verkry.


    Om die aksies wat die aksieknoppies van die uitgebreide siening bevat, te definieer, moet ons die onderskeie Hangende Intente vooraf opstel. Om die gebruik van hierdie styl van kennisgewing te demonstreer, skep ons twee aksieknoppies wat ons toelaat om na die aktiwiteit van die gebeurtenis te gaan of die kennisgewing te verwerp:

    openbare leemte notification6 (int id, int IconId, String titel, String inhoud) {Voorneme opset = nuwe Voorneme (hierdie, Eslabon.class) -intent.setAction (Intent.ACTION_VIEW) -PendingIntent piDismiss = PendingIntent.getActivity (hierdie, 0, opset, PendingIntent.FLAG_UPDATE_CURRENT) -NotificationCompat.Builder mBuilder = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setLargeIcon (BitmapFactory.decodeResource (getResources (), R.drawable.girl_avatar_48x48)). setContentTitle (titel) .setContentText ( inhoud) .setColor (getResources (). getColor (R.color.Dark)). setStyle (nuwe NotificationCompat.BigTextStyle (). bigText (inhoud + ", as jy ons wil hê " +"ons ontmoet môre en ek wys jou die " +"aansoek besonderhede")). AddAction (R.drawable.ic_stat_respond,"REAGEER", piDismiss) .addAction (R.drawable.ic_stat_ignore,"IGNOREER", Null) .setAutoCancel (ware) -Notification kennisgewing = mBuilder.build () - // Bou die kennisgewing en emitirlanotifyMgr.notify (id, kennisgewing) -}

    Albei knoppies word met die metode gematerialiseer addAction (), wat die verteenwoordigende ikoon, sy naam en die PendingIntent wat verband hou met die aksie.

    Deel 9
    Skep `n kennisgewing met `n vorderingsbalk

    Kennisgewings laat u toe om vordering te sien met voortgesette bedrywighede wat verband hou met u aansoeke. As u byvoorbeeld `n prent aflaai, is dit ideaal om `n vorderingsbalk te gebruik wat die vordering van die aflaai aandui. Of as jy plaaslike data met jou bediener in die wolk gesinkroniseer het.


    As jou vordering bepaal word, weet jy ongeveer hoe lank die aksie sal neem, dan kan jy `n vorderingstaaf om die persentasie vordering aan te dui. Indien anders, is die operasie onbepaald en kan dit onbepaald voortduur, dan is dit moontlik om a te gebruik aktiwiteit aanwyser.


    Beide gevalle kan met die metode opgelos word stelProgress () van die klas bouer, wat drie parameters ontvang. Die eerste is die maksimum persentasie wat die vordering sal definieer, die tweede is die huidige vordering en die derde is `n vlag wat aandui of die proses in proses bepaal of onbepaalbaar is.


    Volgende sal ons `n nuwe kennisgewing met hierdie eienskappe skep. Ons sal `n siklus binne `n draad implementeer om die vordering van enige operasie te simuleer. Dit sal ons toelaat om die vordering van die vorderingsbalk binne die kennisgewing te sien:

    openbare leemte notification5 (finale int id, int IconId, String titel, String inhoud) {einde NotificationCompat.Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setContentTitle (titel) .setContentText (inhoud) .setNumber (noNotificaciones ) -Nuwe Draad (nuwe uitvoerbare () {@Overridepublic leemte run () {int i - // siklus vir simuleer progresofor (i = 0- i <= 100 i + = 5) {// Maak seker dat jy 100% gestel soos gemeet máximabuilder.setProgress (100, i, vals) - // Uitgawe die notificaciónnotifyMgr.notify (id, builder.build ()) - // Delay uitvoering van hilotry {// Delay 1sThread.sleep (1000) -} catch (InterruptedException e) {Log.d (TAG, "Misluk slaap (1000) ") -}} / * UPDATUM VAN KENNISGEWING * /// Vertoon sukses boodskap na terminabuilder.setContentText ("Voltooi sinchronisasie") // Verwyder progreso.setProgress bar (0, 0, vals) -notifyMgr.notify (id, builder.build ()) -}}) begin () -.}

    Soos u kan sien, het ons die vorderingsbalk uitgeskakel bloot deur 0 as `n parameter in die huidige en maksimum vordering te gebruik:

    Android-kennisgewing-bar-progreso.jpg" klas ="beeld ligkas">
    Prent getiteld Android notificacion barra progreso.jpg

    In die geval van `n onbepaalde operasie moet u net die vlag van die metode aktiveer stelProgress () om waar, Daarmee word die maksimum en huidige vordering geïgnoreer.

    Android-kennisgewing-aanwyser-actividad.jpg" klas ="beeld ligkas">
    Prent getiteld Android notificacion indicador actividad.jpg

    Deel 10
    Stel `n kennisgewing kennisgewing vir Android 5 op

    in Android Lollipop `n nuwe styl van die aanmelding van kennisgewings genaamd kennisgewing kennisgewings verskyn. Dit verskyn as `n drywende venster oor die aktiwiteit wat ons nou doen. Dit word nie in die kennisgewingbalk of die laai geprojekteer nie, so hulle betree jou visuele ruimte sonder meer, sodat jy hulle kan verwerp sonder om die taak wat jy doen, te beïnvloed. Die idee van hierdie modaliteit is om die gebruiker in kennis te stel van `n dringende gebeurtenis waarvoor hy `n vinnige besluit moet neem met die aksieknoppies wat geprojekteer word.

    Android-Kennisgewing-aviso.jpg" klas ="beeld ligkas">Prent getiteld Android notificacion aviso.jpg

    Kennisgewings word ook gewys omdat Android hulle as `n hoë prioriteit geïdentifiseer het of omdat intern bepaal het dat die kennisgewing op hierdie manier geprojekteer sal word. Byvoorbeeld, inkomende oproepe of alarms is gebeurtenisse wat waarskuwings kennisgewings lewer.


    Om `n waarskuwingskennisgewing te skep, moet ons net die metode gebruik setFullScreenIntent (), wat die ooreenstemmende hangende bedoeling aan die kennisgewing toeken en ook aan die UI-stelsel kommunikeer dat dit in die vorm van `n waarskuwing geprojekteer word. Kom ons kyk hoe om dit te doen:

    openbare leemte notification4 (int id, int IconId, String titel, String inhoud) {// Strukturering notificaciónNotificationCompat.Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setContentTitle (titel) .setContentText (inhoud) .setNumber (noNotificaciones) - // Skep intentIntent opset = nuwe voorneme (hierdie, MainActivity.class) -intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK) - // Skep hangende intentPendingIntent fullScreenPendingIntent = PendingIntent.getActivity (hierdie, 0, opset, PendingIntent.FLAG_CANCEL_CURRENT) -// Toewys voorneme en stel dit waar om te meld as waarskuwingsbouer.setVolSkermIntent (volleSkermPendens, waar) -// Bou die kennisgewing en emitirlanotifyMgr.notify (id, builder.build ()) -}

    setFullScreenIntent () ontvang as `n tweede parameter `n vlag om die onderbreking van die kennisgewing te aktiveer voor wat die gebruiker doen. Dit beteken dat die kennisgewing in die waarskuwingsmodus aangebied word en dit `n hoë prioriteit sal gee.

    Deel 11
    Definieer die sekuriteitsvlak van kennisgewings

    Met Android Lollipop kan kennisgewings vertoon word op die sluitskerm as die gebruiker so besluit in die konfigurasie van die platformvoorkeure. Dit laat vinnige toegang tot gebeurtenisbestuur met `n minimum moeite.


    Om te bepaal of die kennisgewings in die blokkeerskerm verskyn, is daar die sigbaarheidseienskappe. Alles hang af van die vlak van privaatheid wat aan die kennisgewing toegewys is. Wat in die kode is vertaal na die gebruik van die metode setVisibility () van die Bouwer-klas, met watter een van die volgende konstantes toegeken word:

    • VISIBILITY_PUBLIC: Toon al die inhoud van die kennisgewing op die blokkeer skerm.
    • VISIBILITY_PRIVATE: Toon minimum besonderhede van die kennisgewing, soos die ikoon en die titel, maar niks oor die detail self nie.
    • VISIBILITY_SECRET: Daar word geen kennisgewingsinligting vertoon nie.

    Om hierdie funksie te gebruik, raadpleeg ons slegs die konstantes binne NotificationCompat en ons gee dit aan die bouer toe:

    NotificationCompat.Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setContentTitle (titel) .setContentText (inhoud) .setVisibility (NotificationCompat.VISIBILITY_PUBLIC) -

    Kennisgewings is opsionele items binne `n Android-program. Dit is dus belangrik om te onthou om jou deaktivering en instellings in die voorkeure-aktiwiteit op te spoor.

    Android-Kennisgewing-seguridad.jpg" klas ="beeld ligkas">Prent getiteld Android sekuriteit kennisgewing

    Deel 12
    Integreer alle kennisgewings wat tot dusver geskep is

    Die laaste stap is om alle metodes vir kennisgewings in te samel en die druk van elke item in die lys te stel. So ons hoof aktiwiteit sal wees soos volg:

    invoer android.app.Notification-invoer android.app.NotificationManager-invoer android.app.PendingIntent-invoer android.content.Intent-invoer android.graphics.BitmapFactory-invoer android.support.v4.app.NotificationCompat-invoer android.support .v4.app.TaskStackBuilder-invoer android.support.v7.app.ActionBarActivity-invoer android.os.Bundle-invoer android.util.Log-invoer android.view.Menu-invoer android.view.MenuItem-invoer android.view .view-invoer android.widget.AdapterView-invoer android.widget.ArrayAdapter-invoer android.widget.ListView-openbare klas implemente MainActivity strek ActionBarActivity AdapterView.OnItemClickListener {private statiese finale String TAG = MainActivity.class.getSimpleName () - private ArrayAdapter adapter-private script lys lys-private NotificationManager notifyMgr-private boolean segundaVez = FALSE- @ Overrideprotected leemte OnCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -setContentView (R.layout.activity_main) - // Kry listalist = (ListVie w) findViewById (R.id.lista) - // Skep itemsString inhoud items [] = {"Eenvoudige kennisgewing","Kennisgewing + Aksie","Kennisgewing + Update","Kennisgewing + Kennisgewing","Kennisgewing + Vordering","Big View-kennisgewing"} - // Skep adaptadoradapter = nuwe ArrayAdapter(Dit android.R.layout.simple_list_item_1, items) - // Bring tot listalist.setAdapter adapter (adapter) -list.setOnItemClickListener (hierdie) -notifyMgr = (NotificationManager) getSystemService (NOTIFICATION_SERVICE) -} public void notification1 ( int id, int IconId, String titel, String inhoud) {NotificationCompat.Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setLargeIcon (BitmapFactory.decodeResource (getResources (), R.drawable.girl_avatar_48x48)). setContentTitle (titel) .setContentText (inhoud) .setColor (getResources () getColor (R.color.Dark).) - // Bou die kennisgewing en emitirlanotifyMgr.notify (id, builder.build ()) -} public void notification2 (int id, int IconId, String titel, String inhoud) {// Skep die builderNotificationCompat.Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setLargeIcon (BitmapFactory.decodeResource (getResources (), R.drawable.girl_avatar_48x48) ) .setContentTitle (titel) .setContentText (inhoud) .setCo lor (getResources () getColor (R.color.Dark).) - // nuwe geval van voorneme wat daarop gemik is EslabonIntent opset = nuwe Voorneme (hierdie, Eslabon.class) - // Skep pilaTaskStackBuilder StackBuilder = TaskStackBuilder.create (hierdie) - // Voeg aktiwiteit padrestackBuilder.addParentStack (Eslabon.class) - // Verwysingstegnieke voorneme vir notificaciónstackBuilder.addNextIntent (bedoeling) - // Kry PendingIntent as gevolg van pilaPendingIntent stackBuilder.getPendingIntent resultPendingIntent = (0, PendingIntent.FLAG_UPDATE_CURRENT) - // Opdrag die hangende intentbuilder.setContentIntent (resultPendingIntent) - // Verwyder kennisgewing om met ellabuilder.setAutoCancel (ware) - // Bou kennisgewing en emitirlanotifyMgr.notify (id, builder.build ()) -} / * Gebruik hierdie kode om te bewys met `n aktiwiteit ESPECIALpublic notification2 leemte (int id, int IconId, String titel, String inhoud) Intent.FLAG_ACTIVITY_CLEAR_TASK) -PendingIntent pendingIntent = PendingIntent.getActivity (hierdie, 0, opset, pendingIntent .FLAG_UPDATE_CURRENT) - // Opdrag hangende intentbuilder.setContentIntent (pendingIntent) - // Bou die kennisgewing en emitirlanotifyMgr.notify (id, builder.build ()) - * / public void notification3 () {String GRUPO_NOTIFICACIONES = "soortgelyke kennisgewings"-Notifikasie kennisgewing - / Kyk of die itemif reeds gedruk is (! SecondVez) {notification = new NotificationCompat.Builder (this) .setContentTitle ("Boodskap Nuwe"). SetSmallIcon (R.drawable.ic_stat_msg) .setContentText ("Carlos Cranberry Waar is jy?") .setColor (getResources () getColor (R.color.Dark)) setVisibility (NotificationCompat.VISIBILITY_PUBLIC) .build () - .. // aktiveer banderasegundaVez =} anders {ware-kennisgewing = nuwe NotificationCompat.Builder (hierdie). setContentTitle ("2 nuwe boodskappe") .setSmallIcon (R.drawable.ic_stat_msg) .setNumber (2) .setColor (getResources (). GetColor (R.color.Dark)). SetStyle (nuwe NotificationCompat.InboxStyle (). AddLine ("Carlos Cranberry As jy dit gesien het?") .addLine ("Ximena Claus Nuwe logo ontwerp") .setBigContentTitle ("2 nuwe boodskappe")) SetGroup (GRUPO_NOTIFICACIONES) .setGroupSummary (ware) .build () -.} NotifyMgr.notify (3, kennisgewing) -} public void notification4 (int id, int IconId, String titel, String inhoud) {// Strukturering notificaciónNotificationCompat .Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setContentTitle (titel) .setContentText (inhoud) .setColor (getResources () getColor (R.color.Dark).) setVisibility (NotificationCompat.VISIBILITY_PUBLIC). - // Skep intentIntent opset = nuwe voorneme (hierdie, MainActivity.class) -intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK) - // Skep hangende intentPendingIntent fullScreenPendingIntent = PendingIntent.getActivity (hierdie, 0, opset, PendingIntent.FLAG_CANCEL_CURRENT) - // Ken beproefde en ware kennis te stel as stel avisobuilder.setFullScreenIntent (fullScreenPendingIntent, true) - // Bou die kennisgewing en emitirlanotifyMgr.notify (id, builder.build ()) -} public void notification5 (finale int id, int IconId, String titel, string inhoud) {Final NotificationCompat.Builder bouer = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setContentTitle (titel) .setContentText (inhoud) .setColor (getResources () getColor (R.color.Dark).) - nuwe onderwerp (nuwe uitvoerbare ( ) {@Overridepublic leemte run () {int i - / * // siklus vir simuleer progresofor (i = 0- i <= 100 i + = 5) {// Maak seker dat jy 100% gestel soos gemeet máximabuilder.setProgress (100, i, vals) - // Uitgawe die notificaciónnotifyMgr.notify (id, builder.build ()) - // Delay uitvoering van hilotry {// Delay 1sThread.sleep (1000) -} catch (InterruptedException e) {Log.d (TAG, "Misluk slaap (1000) ") -)} * // * UPDATE OF NOTIFICATION * / / / Wys suksesboodskap aan terminabuilder.setContentText ("Aktiwiteitsaanwyser") // Verwyder progreso.setProgress bar (0, 0, true) -notifyMgr.notify (id, builder.build ()) -}}) begin () -.} Openbare leemte notification6 (int id, int IconId, string titel, string inhoud) {voorneme opset = nuwe voorneme (hierdie, Eslabon.class) -intent.setAction (Intent.ACTION_VIEW) -PendingIntent piDismiss = PendingIntent.getActivity (hierdie, 0, opset, PendingIntent.FLAG_UPDATE_CURRENT) -NotificationCompat.Builder mBuilder = nuwe NotificationCompat.Builder (hierdie) .setSmallIcon (IconId) .setLargeIcon (BitmapFactory.decodeResource (getResources (), R.drawable.girl_avatar_48x48)). setContentTitle (titel) .setContentText (inhoud) .setColor (getResources (). getColor (R.color.Dark)). setStyle (nuwe NotificationCompat.BigTextStyle (). bigText (inhoud + ", as jy ons wil hê " +"ons ontmoet môre en ek wys jou die " +"aansoek besonderhede")). AddAction (R.drawable.ic_stat_respond,"REAGEER", piDismiss) .addAction (R.drawable.ic_stat_ignore,"IGNOREER", Null) .setAutoCancel (ware) -Notification kennisgewing = mBuilder.build () - // Bou die kennisgewing en emitirlanotifyMgr.notify (id, kennisgewing) -} @ Overridepublic leemte onItemClick (AdapterView
    Deel op sosiale netwerke:

    Verwante
    Hoe om kennisgewings op Instagram af te skakel of aan te skakelHoe om kennisgewings op Instagram af te skakel of aan te skakel
    Hoe om die kennisgewingsklank van Facebook Messenger op Android te veranderHoe om die kennisgewingsklank van Facebook Messenger op Android te verander
    Hoe om die klank van kennisgewings in Kik te veranderHoe om die klank van kennisgewings in Kik te verander
    Hoe om Instagram-kennisgewings op `n iPhone af te skakelHoe om Instagram-kennisgewings op `n iPhone af te skakel
    Hoe om kennisgewings van speletjies op Facebook af te skakelHoe om kennisgewings van speletjies op Facebook af te skakel
    Hoe om Twitter-kennisgewings af te skakelHoe om Twitter-kennisgewings af te skakel
    Hoe om nuusberigte op `n iPhone af te skakelHoe om nuusberigte op `n iPhone af te skakel
    Hoe om WhatsApp-kennisgewings op Android af te skakelHoe om WhatsApp-kennisgewings op Android af te skakel
    Hoe om kennisgewings op die Gmail-lessenaar uit te skakelHoe om kennisgewings op die Gmail-lessenaar uit te skakel
    Hoe kennisgewings op Facebook verwyder wordHoe kennisgewings op Facebook verwyder word
    » » Hoe om kennisgewings op Android Lollipop te skep
    © 2024 dmylogi.com