, skabe en ringetone randomizer på androide,,,,, 24,,,,,,,,, 6,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, androide brugere er altid på udkig efter applikationer, som kan ændre opførsel af deres udstyr på nye og innovative måder.den kunstige livsform platform giver sin udviklere meget frihed til at opbygge sådanne apps.i denne forelæsning, vil du lære at skabe en app, der randomizes den ringetone af en androide, telefon, hver gang den modtager et opkald.,,, forudsætninger, hvis du vil følge med, så sørg for, at i den seneste version af androide studie installeret.du kan få det fra en android udvikler websted.,, fordi det er en mellemliggende lektion, jeg vil ikke dække de basale i alt for mange detaljer.jeg går ud fra, at du har allerede skabt en eller flere androide apps, og er bekendt med de grundlæggende androiden sdk.,, 1.skabe et nyt projekt, start androide studie og skabe et nyt projekt.sæt navn på anvendelse til , ringtonerandomizer,.sørg for at vælge en unik pakke navn.,,,,, en app kan køre på alle telefoner, der har api - niveau 8 eller højere, så fastsat minimum sdk, til androide 2.2.,,,,, næste, vælge, ikke at give aktivitet, og klik, færdig.,,,,, 2. edit manifest, vores app skal følgende tilladelser:,,, - androiden. tilladelse. read_phone_state, til påvisning af indkommende opkald, androide. tilladelse. write_settings, at ændre ringetone om misligholdelse, androide. tilladelse. read_external_storage, for at hente en liste over tilgængelige ringetoner, tilføjes følgende til androidmanifest. xml,:,, < anvender tilladelse androide: navn = "androide. tilladelse. read_phone_state" /> < anvender tilladelse androide: navn = "androide. tilladelse. write_settings" /> < anvender tilladelse androide: navn = "androide. tilladelse. read_external_storage "/>,, det har en app, aktivitet, for at gøre det muligt for brugeren at aktivere og deaktivere ringetone ændrer adfærd.,,, < aktivitet androide: navn =". mainactivity "> < hensigt filter > < aktion androide. navn =" androide. forsæt. vigtigste "/> < kategori androide: navn =" androide. hensigt. kategori. granatkaster "/> < /hensigt filter > < /aktivitet >, har det også, broadcastreceiver, til påvisning af ringe tilstand ændringer.som vist nedenfor, vil foranstaltninger, som den lytter til er androide. hensigt. handling. phone_state,.,,, < modtager androide: navn = ". ringreceiver" androide: mulighed for = "ægte" > < hensigt filter > < aktion androide: navn = "- androiden. hensigt. handling. phone_state" /> < /hensigt filter > < /modtager - >,, 3.edit tråde. xml,,, tråde. xml, fil indeholder strenge app anvendelser.opdatering, værdier /i. xml - som vist nedenfor:,, <?xml - version = "0" kodning = "utf - 8"?> < ressourcer > < snor navn = "app_name" > ringetone randomizer < /snor > < snor navn = "aktiver" > aktivere ringetone randomizer < /snor > < snor navn = "deaktivere" > deaktivere ringetone randomizer < /snor > < snor navn = "list_of_ringtones" > ringetoner til rådighed på denne anordning: < /snor > < /ressourcer >,, 4.skabe aktivitet layout,,, aktivitet, skal følgende synspunkter:,,, en , togglebutton, at aktivere /deaktiver ringetone randomizer, en , listview, til at vise alle tilgængelige ringetoner, en , textview, der fungerer som en etiket, skabe en fil ved navn, layout /activity_main.xml, og i stedet for dens indhold med følgende.som du kan se, layout, er ganske enkel og ligetil.,,, <?xml - version = "0" kodning = "utf - 8"?> < linearlayout xmlns: androide = "http://schemas.android.com/apk/res/android" androide: orientering = "vertikale" androide: layout_width = "match_parent" androide: layout_height = "match_parent" androide: polstring = "16dp" > < togglebutton androide: layout_width = "match_parent" androide: layout_height = "wrap_content" androide - textoff = "@ snor /aktivere" androide: texton = "@ snor /deaktiver" androide: id = "@ + id /greb" /> < textview androide: layout_width = "match_parent" androide: layout_height = "wrap_content" androide: tekst = "@ snor /list_of_ringtones" androide. textstyle = "fed" /> < listview androide: layout_width = "match_parent "androide: layout_height =" match_parent "androide: id =" @ + id /list_of_ringtones "/> < /linearlayout >,, 5.skabe, ringtonehelper, hjælper klasse, for at undgå, at der i forbindelse med, ringtonemanager, direkte i, aktivitet eller den, broadcastreceiver, skal vi skabe en hjælper klasse, der hedder, ringtonehelper,.,,, offentlige klasse ringtonehelper {},,, ringtonehelper, klasse har to statisk metoder, der gør brug af den, ringtonemanager, klasse. fetchavailableringtones,,,,, , fetchavailableringtones, metode henter en liste over tilgængelige ringetoner, tilbage en liste af, ringetone, genstande, offentlige statisk liste < ringetone > fetchavailableringtones (forbindelse forbindelse) (liste < ringetone > ringetoner = nye arraylist < > c); ringtonemanager trommefisk i.a.n. = nye ringtonemanager (baggrund) og sbr. settype (ringtonemanager.type_ringtone); int n = sbr. getcursor(). getcount(); int (i = 0. jeg < n. jeg + +) (ringetoner. der tilsættes (sbr. getringtone (i));} tilbage ringetoner.}, i , fetchavailableringtones, metode, vi begynder ved at skabe et tilfælde af , ringtonemanager, klasse.den , ringtonemanager, genstand kan nævne alle de lyde, der er til rådighed på anordningen.dette omfatter lyder for alarmer og andre meddelelser.,, vi bruger , settype, metode til at fastsætte sine type , type_ringtone, , som vi er kun interesserede i ringetoner.,, vi påberåber den , getcount, metode til at vide, hvor mange ringetoner er til rådighed, og de kalder , getringtone, metode i, for loop, idet hver ringetone, ringetoner,.,, changeringtone,,,, changeringtone, metode er ansvarlig for at ændre ringetone af anordningen, det centrale element i vores app.,, offentlige statisk tomrum changeringtone (forbindelse forbindelse) (sharedpreferences præferencer = sammenhæng. getsharedpreferences ("randomizer" sammenhæng. mode_private); hvis (!præferencer. getboolean ("aktive" falsk) tilbage. ringtonemanager trommefisk i.a.n. = nye ringtonemanager (baggrund) og tilfældige stikprøver = ny tilfældig (system. currenttimemillis()); int n = tilfældigt. nextint (sbr. getcursor(). getcount()); ringtonemanager. setactualdefaultringtoneuri (sammenhæng, ringtonemanager.type_ringtone, sbr. getringtoneuri (n)},, vi først kontrollere, i , sharedpreferences, , hvis brugeren har aktiveret ringetone randomizer.vi så bruge den , tilfældigt klasse til at vælge et tilfældigt tal, der er mindre end antallet af disponible ringetoner.,,, getringtoneuri, metode er anvendt for at hente uri af tilsvarende ringetone, og send det til den , setactualdefaultringtoneuri, metode til at ændre ringetone.,, 6.skabe radiofonimodtager, skabe en ny klasse, der hedder, at ringreceiver, arver fra , broadcastreceiver,.den nye klasse kun vil have en metode, der hedder, onreceive,.i denne metode, vi skal ringe til hjælperen klasse, changeringtone, metode, hvis følgende kriterier er opfyldt:,, de har modtaget, forsæt, er lig med , telephonymanager.action_phone_state_changed, og værdien af de lookup centrale , extra_state, er lig med , telephonymanager.extra_state_ringing,,, det er, hvad det, ringreceiver, klasse skal se ud:,, offentlige klasse ringreceiver udvider broadcastreceiver {@ tilsidesætte offentlige tomrum onreceive (forbindelse forbindelse hensigt hensigt) (hvis (hensigt. getaction(). = (telephonymanager. action_phone_state_changed)) (string callstate = hensigt. getstringextra (telephonymanager. extra_state); hvis (callstate. = (telephonymanager. extra_state_ringing)) (ringtonehelper. changeringtone (baggrund)}}), 7.skabe aktivitet, skabe en ny klasse, der hedder, at mainactivity, arver fra , aktivitet.vi har forrang, oncreate, metode og udføre følgende aktioner:,, påberåbe sig , setcontentview, at anvende layout er defineret i activity_main.xml, ring til hjælper klasse, fetchavailableringtones, en metode til at forsyne en liste af ringetoner nulstille, listview, nulstille, togglebutton,,,, mainactivity, klasse nu ser sådan noget, offentlige klasse mainactivity udvider aktivitet (private listview listofringtones; private togglebutton togglerandomizer; private liste < ringetone > ringetoner; @ tilsidesætte beskyttede tomrum oncreate (bundt savedinstancestate) (super. oncreate (savedinstancestate); setcontentview (r.layout. activity_main); listofringtones = (listview) findviewbyid (r.id.list_of_ringtones); togglerandomizer = (togglebutton) findviewbyid (r.id.toggle); ringetoner = ringtonehelper. fetchavailableringtones (dette). initializelist(); initializetoggle();}},, initializetoggle,,, i , initializetoggle, metode, vi satte den toggle - knap baseret på en, boolean, værdi ved navn, aktiv, i , sharedpreferences,.denne værdi er sat til, falske, som standard, har vi også tilføje, oncheckedchangelistener til greb knap at ajourføre den værdi i , sharedpreferences,.det, putboolean og begå metoder af, redaktør, anvendes til at opnå dette.,, private tomrum initializetoggle() (endelige sharedpreferences præferencer = getsharedpreferences ("randomizer" sammenhæng. mode_private); boolean aktive = præferencer. getboolean ("aktive" falsk); togglerandomizer. setchecked (aktive); togglerandomizer. setoncheckedchangelistener (nye compoundbutton. oncheckedchangelistener() {@ tilsidesætte offentlige tomrum oncheckedchanged (compoundbutton buttonview, boolean ischecked) {præferencer. edit(). putboolean ("aktive", ischecked). commit();}})), initializelist,,,, initializelist, metode skaber, adapteren, baseret på den liste, ringetoner.brug android.r.layout.simple_list_item_1, som udformningen af posterne i den, listview,.det er ikke andet end en, textview,.det skal være forsynet med titlen ringetone med, ringetone, klasse, gettitle metode.dette bør ske i, getview, metode af, adapteren, efter at stoppe den,.,, når, adapteren, er klar, overdrage det til, listview, ved at anvende den, listview, er , setadapter metode.,, private tomrum initializelist() {arrayadapter < ringetone > adapter = nye arrayadapter < ringetone > (det android.r.layout.simple_list_item_1, ringetoner) {@ tilsidesætte offentligheden getview (int holdning, mener convertview, viewgroup modervirksomhed) (textview punkt = (textview), super. getview (position, convertview, forældre); punkt på dagsordenen. settext (ringetoner. kom (stilling). gettitle (mainactivity. denne) vende punkt;}}; listofringtones. setadapter (adapter)}, 8.udarbejde og løb, vores app nu er klar til at blive anvendt på en androide, telefon.du burde være i stand til at se alle ringetoner til rådighed på din telefon, når du starter app.klik på den toggle - knappen aktivere randomizer.,,,,, kalder dig fra en anden telefon et par gange.den første gang, du får en opringning, deres oprindelige ringetone vil blive spillet.fra næste opkald og fremefter, vil du høre en tilfældig ringetone hver gang.,, opmærksom på, at denne app ændringer misligholdelse ringetone af din telefon.hvis du har tildelt en specifik ringetone til en kontakt - eller en gruppe af kontakter, som ringetone vil stadig anvendes.,, konklusion, nu ved at gøre brug af de funktioner, der er til rådighed i, ringtonemanager, klasse.de har også lært at identificere indgående opkald.de er fri til at bygge på en app til randomize andre meddelelser på lignende måde.besøg androiden udvikler websted for at lære mere om den, ringtonemanager, klasse.