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.
conținut
- Stappe
- Deel 1genereer `n eenvoudige kennisgewing vir die eerste item in die lys
- Deel 2skep `n kennisgewing met `n aksie vir die tweede item
- Deel 3verseker dat die werkstroom in navigasie tussen aktiwiteite gehandhaaf word
- Deel 4gebruik `n hangende instelling vir `n gereelde aktiwiteit
- Deel 5gebruik `n hangende instelling vir `n spesiale aktiwiteit
- Deel 6leer om kennisgewings vir die derde item te verander
- Deel 7verwyder kennisgewings wanneer jy dit nodig ag
- Deel 8skep `n kennisgewing wat uitbrei vir die volgende item
- Deel 9skep `n kennisgewing met `n vorderingsbalk
- Deel 10stel `n kennisgewing kennisgewing vir android 5 op
- Deel 11definieer die sekuriteitsvlak van kennisgewings
- Deel 12integreer alle kennisgewings wat tot dusver geskep is
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
- 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.
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.
: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> ouer, bekyk vertoning, int posisie, lang id) {skakel (posisie) {// beskrywing van gevalle}}
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 maakNotificationManager
, wat verantwoordelik is vir die bestuur van die uitreiking van u kennisgewings.
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> ouer, skerm, int posisie, lang id) {skakelaar (posisie) {geval 0: notification1 (1 R.drawable.ic_stat_msg,"Ximena Claus",": D Ek het reeds die nuwe logo!") -break-}}
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 waardesingleTask
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 metsetGroup ()
. 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 isInboxStyle
, wat u toelaat om `n lys elemente by die kennisgewing by die metode by te voegaddLine ()
, 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:
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.
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:
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.
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.
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.
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> ouer, bekyk vertoning, int posisie, lang id) {Log.d (TAG, "onItemClick (): item " + posisie) -wisseling (posisie) {geval 0: kennisgewing1 (1, R.drawable.ic_stat_msg,"Ximena Claus",": D Ek het reeds die nuwe logo!") -break-case 1: notification2 (2, R.drawable.ic_stat_msg,"Ximena Claus",": D Ek het reeds die nuwe logo!") -break-case 2: notification3 () - breek 3: notification4 (4, R.drawable.ic_stat_alert,"dringende","Bevestig besigheidsaanstelling by Carlos") -break-case 4: notification5 (5, android.R.drawable.stat_notify_sync,"Sinkroniseer die program","vordering") -break-case 5: notification6 (6, R.drawable.ic_stat_msg,"Ximena Claus",": D Ek het reeds die nuwe logo! ...") -}} @ Overridepublic spyskaart boolean onCreateOptionsMenu (Menu) {getMenuInflater () opblaas (R.menu.menu_main, spyskaart) -RETURN ware -.} @ Overridepublic boolean onOptionsItemSelected (menu item item) {int id = item.getItemId () - indien (id == R.id.action_cancel) {// Opsie om alle kennisgewings kanselleer emitidasnotifyMgr.cancelAll () - terugkeer ware-super.onOptionsItemSelected} terugkeer (item) -}}
- Hoe om Snapchat-kennisgewings aan te skakel
- Hoe om kennisgewings op Instagram af te skakel of aan te skakel
- Hoe om die kennisgewingsklank van Facebook Messenger op Android te verander
- Hoe om die klank van kennisgewings in Kik te verander
- Hoe om Instagram-kennisgewings op `n iPhone af te skakel
- Hoe om kennisgewings van speletjies op Facebook af te skakel
- Hoe om Twitter-kennisgewings af te skakel
- Hoe om nuusberigte op `n iPhone af te skakel
- Hoe om WhatsApp-kennisgewings op Android af te skakel
- Hoe om kennisgewings op die Gmail-lessenaar uit te skakel
- Hoe kennisgewings op Facebook verwyder word
- Hoe om SMS-kennisgewings op `n Android-foon te verwyder
- Hoe om Gmail-kennisgewings te aktiveer
- Hoe om stootkennisgewings van `n Twitter-gebruiker se tweets op iPhone te kry
- Hoe om kennisgewings van die Google+ Hangouts-program vir mobiele in te stuur
- Hoe om onmiddellike kennisgewings van tweets van `n gebruiker van die Twitter vir Android-aansoek…
- Hoe om te weet of iemand op Snapchat skryf
- Hoe om jou Facebook-kennisgewings te sien
- Hoe om outomatiese kennisgewings te aktiveer (druk kennisgewings)
- Hoe kennisgewings instellings in PayPal opdateer
- Hoe om Facebook-kennisgewings te blokkeer