Kuidas teha oma App Browser Android. Parimad androidi brauserid. Veebibrauseri täiendav paigaldamine siseliinidele üleminekuks

Lugupeetud, ma olen üliõpilane BCA. Ma pean viimasel poolaastal ühe projekti tegema. Seetõttu otsustasin luua veebis, mis töötab Android OS-is, kuid ma olen selle taotluse jaoks täiesti. Niisiis, kas keegi aita mind selles aidata. Olen juba installinud kõik vajalikud vahendid, näiteks JDK, Android SDK 3.0, Eclipse. Aga nüüd ei ole mul aimugi, kus ma peaksin alustama brauseri arendamist. Seetõttu aita mind ... Mul on selle projekti jaoks ainult kaks kuud. Nii et kas on võimalik pärast 2 kuud või mitte?

See sõltub sellest, mida sa mõtled brauseri arendamisel ...

Brauseri mehhanismi arendamine + nullist renderdamine on palju tööd, kuid saate hõlpsasti luua Androidsi Webview brauseri Webviewcliendi abil ja luua uue kasutajaliidese, muutes kasutaja suhtlemise meetodit brauseriga.

Webview'il on brauseriga suhtlemiseks suhtlema igasuguseid pealtvaateid, nii et saate seda lihtsalt laiendada. Näiteks saate lubada kasutajalt ülevoolu lehekülgi (näiteks Google Fastflip), katsetades 3D-ga, tehes OpenGL-ruumis kuvatava veebilehe (näiteks sfääri brauseris) jne.

Lähtepunktina vaadake blogi Alexander Kameki ja tema Mosambro projekti, mis laiendab Androidi brauserit Micormat'i toetuse lisamisega.

See kõlab nagu tõesti suur projekt ja seetõttu ei saa te lihtsalt alustada nullist ja kirjuta see alla. Te peate koostama plaani selle kohta, kuidas soovite rakendada kõik osad, klasside salvestusdiagrammid jne. Kui te õpite arvutiteadust, siis oleksite pidanud sellest kuulma eelmistes semestristides.

Kõigepealt peate endalt küsima, kas see projekt on võimalik Nagu näete kommenteerimast, enamik inimesi nõustub, et te ei tohiks seda ülesannet alahinnata!

Ma tõesti soovitan teil mõista selle ülesande ulatust, siin on Androidsi brauseri lähtekood, mis annab teile idee selle keerukusest.

Põhiline brauseri loomine võib teha iga päev või kaks nende jaoks, kellel on kogemus Androidi arendamisel, samuti teised väitsid, et Webview pakub peaaegu kõike, mida vajate veebilehe kuvamiseks. JavaScripti ja muude funktsioonide jaoks on mitmeid seadeid ja seejärel pärast URL-i peamist tekstikasti märgistamist ja GO URL-i, mis on suures osas peamine veebibrauser.

Tegelik töö on kõikides laiendatud seadetes. Brauseri loomine, kes konkureerib suurte poisid, võib-olla ühe inimese jaoks natuke raske, kuid teha midagi, mis töötab, väga võimalik. Proovige!

Täieliku veebibrauseri loomiseks Androidis kasutate Webviewi.

Lihtne siduv kood:

Webview WV \u003d (Webview) FindViewbyid (R.ID.Webview1); WV \u003d (Webview) FindViewbyid (R.ID.Webview1); Wv.loadurl ("http://www.apsmind.com");

Uuring programmeerimine Android Ma hakkasin mitte nii kaua aega tagasi. Pärast EcLips reetis minu esimene hello sõna, tahtis kohe rohkem: paljusid plaanid ja suured ideed tekkisid. Üks selline idee oli kirjutada oma brauseri. Ma arvan, et paljud algaja programmeerijad on olnud selline soov. Need on minu nõuded tarnitati ja mis lõpuks juhtus.

  • Programm peaks avama lingid ülemaailmse võrgustiku, et vabalt liikuda lehekülgedel ja tahapoole;
  • Suutma faile alla laadida ja võrku tagasi alla laadida;
  • Loo järjehoidjaid ja salvestage need;
  • Suutma teistest rakendustest saadetud linke alla laadida;
  • Seal peab olema kodulehekülg, menüü, millel on erinevad seaded jne.

Üldiselt on täieõiguslik brauser oma kätega. Ma kehastan koodis.

Programm on kirjutatud Androidis sisalduva standardse Webview alusel. Ma kasutan Yandexi alguslehena, see on maitse küsimus. Kuna põhitegevus on makkusvõime.

Esiteks määran Määrake XML-faili -afity_main.xml märgi. Peamise konteinerina kasutame linearlayout - me Wrap IT Progressbar kuvada boot protsessi. Järgmisena looge teine \u200b\u200blinearlayout konteiner - wrap meie Webview ja FrameLayout (seda kasutatakse venitada video mängitav kogu ekraanil).

Vaata koodi

Linearlayout XMLNS: Android \u003d "http://schemas.android.com/apk/res/android" XMLNS: tööriistad \u003d "http://schemas.android.com/tools" Android: Layout_width \u003d "Match_parent" Android: Layout_eight \u003d "Match_parent" android: orientatsioon \u003d "Vertikaalsed" tööriistad: kontekst \u003d ". Majajõuline"\u003e

Kirjutagem koodi mainjoa

Täielik maintektiivsuse kood.

Vaata täielikku koodi

Import java.io.file; Import android.r.menu; Import android.annotation.supressliint; Import android.app.acturbar; Importida android.app.aktiivsus; Import android.app.AlertDialog; Import android.app.downloadmanager; Import android.app.downloadmanager.request; Import android.app.Keyguardmanager; Import Android.app.SearchManager; Import android.content.broadcastreceiver; Import android.content.Context; Import android.content.Dialoginterface; Importida android.content.intenti; Import android.content.intentfilter; Import android.content.Sharedpreferents; Import android.net.uri; Import android.os.blunle; Import android.os.Enviirkond; Import android.os.pacelable; Import android.os.powermanager; Import android.preference.Prefeicanager; Import android.provider.Mediastore; Import android.util.log; Import android.view.KeieVent; Import android.view.menu; Import android.view.Menuitem; Import android.view.View; Import android.view.windowManager; Import android.webkit.ConsoleSage; Import android.webkit.downloadListener; Import android.webkit.ValuecalLback; Import android.webkit.webbackforistinglist; Import android.webkit.webchromeclient; Import android.webkit.webView; Importida android.webkit.webviewclient; Import android.widget.framelayout; Importida android.widget.SearchView; Import android.widget.toast; Import android.Graphics.bbitMap; Import android.webkit.urlutil; Avaliku klassi mainevõime laiendab aktiivsust (// Boole staatus ühendi Boole'i \u200b\u200bisintenetrberent \u003d False; Connecteder CD; Private WebChromeclienti Aktiivsuse aktiivsus \u003d see; avalik Uri Imageri; privaatne staatiline lõplik int filechoser_resultcode \u003d 2888 MuploadMessage; Privaatne Uri McApturediMageuri \u003d null; Private Downloadmanager; @Override kaitstud void onCreate (SalvediinstanceState); SetcontentView (R.Layout.activity_main); // luua näide ühenduse detektori klassis: CD \u003d uus ConnectionDeter (getapplicalContext ()); // Luua kodu lõplik actionbar actionBAR \u003d GealActionbar ( ). Action \u003d intent.getseerimine (); kui (downloadmanager.action_download_complete.equals (action)) (Action)) (loading ();)))))) MWebView \u003d (r.id.web_view); Mitulscreencontainer \u003d (framelayout) FindViewbyid (r.id.fullScreen_container); mwebview.setwebchromeclient (mwebchromeclient); MWebView. Loadurl ("http://yandex.ru"); Käepideme (gettintent ()); Klass HELLUBVIEWCLIENT laiendab Webviewclient (@override Public Void OnpageStarted (Webview View, String URL, Bitmap Favicon) (Super.onpagesarted (Vaata, URL, Favicon); leidaViewbyid (R.ID.PROgress1). URL); urload \u003d mwebview.getsedurl (); connectingTherneti ();) @override avalik boolean shoulirolouliroloader (View.loadur (URL); // joosta lingid URI Uri \u003d Uri.Parse (URL); kui (URI.GETSCHEME (). Võrdub ("turg") (android.content.intent.action_view); i.Stedata (URI); i.ADDFlags (intent.flag_activity_new_task); starteriivsus (I); mwebview.cangoback (); (MWebview.goback ())) // Käivita e-posti aadressil (uri.getscheme (). Edasi ("Mailto")) (kavatsus i \u003d uus kavatsused (Android.content.intent.intent.action_send); i.settype ("Tekst / HTML") ; i.putExtra (intent.extra_subject, "sisenege teema"); i.putExtra (intent.extra_text "sisestage tekst"); i.putExtra (intent.extra_EMail, uus string (URL)); startctct Ictiv (I); mwebview.cangoback (); (MWebview.Goback ();))) // Käivita IF kõne (Uri.getscheme ()). Edasi ("TEL") (kavatsus i \u003d uus kavatsus (android.content.intent.action_dial); i.setdata (URI) käivitamine (I); mwebview.cangoback (); (mwebview.goback ();)))) // joosta loping, kui (uri.getscheme ()) ("GEO")) (kavatsus i \u003d uus kavatsus (Android.Contentne) . Intent.action_View); I.setdata (URI); MANALDAMINE (I); mwebview.cangoback (); (MWebview.goback ();)) Tagasi tõsi; @Override avalik void onpagefiniseeritud (FindViewbyid (r.id.Progress1) .sektiivsus (View.Gone);) @override avalik void onreceiveError (Webview View, Intrcode, stringi kirjeldus, string Faeringetrl) (ConnectingThetnet (); MWebView.loadur ( "Fail: ///android_asset/error.png");))) mwebview.setwebViewclient (uus HELLUBVIEWCLIENT ()); // Laadige seadme failid MWebView.SeeDdownloadListeneri (Uus DownloadListeneri () (@override avalik void) (lõplik string URL, string-url, stringitarne, string-cratencespositsiooni, string mimetüüp, pikk consunlengpr. CONSTIONDISPOSITION, MIMETÜSE); lõplik AlertDialog.Builder DownloadDialog \u003d uus AlertDialog.Builder (maine.This); dokeeldDialog.Setitle (allalaadimishaldur "); dokeeldDialog.setMessage (" Laadige see fail Donwloyload Folder'ile alla " + "N" + URL); DownloadDialog.SeeSitiveTon ("Jah", Uus dialooginterface.onclicklisthener () (DiagoLinterface, INT I) (Dodownload (URL, failinimi); dialooginterface.Dismiss ();))); dokeeldDialog .setNegatiivne NO ", Uus dialooginterface.onclicklistsener () (avalik void onclick () () () ())))) ) // **************************************** // ***** ************************************ // ************ ***************************** avalik void ühendamine () () (//) Interneti-ühenduse staatus IsintenetPresent \u003d CD.ConnectingTointhet ( ); / / Me kontrollime interneti staatust: kui (isinternetPresent) (// Interneti-ühendus sööb // tehke HTTP-päringuid :) Eese (// Interneti-ühendused nr röstsai.Maketext röstsai.length_short) .Show ();)) @supressliint ("Setjavascripibleble") @override // Public VOID ONRESUME () Seaded (Super.onressume (); SharedPrefeces Spref \u003d eelistusManager.getDefaultsharedpreferents ("IMG", FALSE)) (MWEBVIEW.METSTETINGS () MWEBVIEW.METSIMAGESITAMATATOMATIAATIA (FALSE);) Else (MWebView.getSatettings () seadistamine .getingings (). SetjavaScripifeble False);) mujal (MWebView.getSatettings (). Setjavascriptenabled (TRUE); ) kui (Sprf.getboolase ("vahemälu", vale))) (vahemälu \u003d 2;) See, SalveSbMactivity.Class); INTENT.PUTEXTRA ("URLTITLE", URLTITLE1); INTENT.PUTEXTRA ("URLPAGE", URLPAGE1); starteriivsus (kavatsus);) avalik void pref () (// kavatse intensiivsetele) See, eelistustegevus.Klass); starteriivsus (kavatsus);) // Puhastage vahemälu ja privaatne tühimiku Clcache () (ClearCache (aktiivsus) ajalugu; mwebview.clearcache (TRUE); See, "vahemälu ja lugu kustutatakse", röstsai. Pikkus_short) .Show (); ) @Override kaitstud VOID ONEERLEAVEHINT () (SUPER.ONUSERLEAAVEHINT ();) @override avalik boolean onKeyKeydown (INT-klahvikood, klahviriietus) (// nupp tagasi, kui ((klahvicode \u003d\u003d keyevent.keycode_back)) (MWebView.Cangoback)) (MWEBVIEW.GOBACK ();) Tagasi tõsi (Action)) (string URL \u003d tahtlik.getdatastring (); röstsai.Maketext (see, URL, röstsam.length_short) .Show (); mwebview.loadurl (URL); // Gruusia tagastab tõelise lehekülg;) Tagasi False;) // Privaatne void Dodownload Download Manager (uririginal \u003d Uri.Parse (URL); proovige (röstsai.Maketext (maine.This, "allalaadimine" + failinimi, röstsai.Likkus_long). Näita (); Taotluse taotlus \u003d uus downloadmanager.request ( Uri.Parse (URL); päring.setdestingEnexternalpublicdir (keskkond ülesrektooriumi_downloads, Filena mina); Final Downloadmanager DM \u003d (DownloadManager) GetsystemSystemVice (kontekst.download_Service); Dm.enqueue (taotlus); ) Püüda (röstsai.Maketext (see, "viga", röstsai.Lukles_short). WebChromeclient MWEBCHROMECLIENT \u003d Uus WebChromeclient () (@override @suppresswarnings ("amortisatsioon") Public VOID ONSHOWCUSTOMVIEW (Vaata vaadet, Inti taotluse tagasihelistamise) ) (! Tagasihelistamise;) @override avalik void onhidecustomview () (super.onhidecustomview (); kui (mfllscreenview \u003d\u003d null) (tagasipöördumine) (tagastus) Nähtavus (View.gone); Muthscreencontainer.RemoveView (MitulScreenview); mfllscreenviewcallback.oncustomviewhided (); MuthScreenview \u003d null; ) // ********************************************* Me laeva Files Network // OpenFilechooser Android 3.0+ avaliku VOIDE OPENFILECHILECHOSER (väärtusECallback Uploadmsg, string-aktsepteerimine )) (// // ja looge androidexamplefolder Sdcard ImageSoragedir.mkdirs ();) // Looge kaamera pildistatud pildi tee failile ja nime failifail \u003d uus fail (IMG_ "+ string.Valueof (System.currentTimemillis () + \u003d) Uus kavatsus); i.ADDCategory (kavatsused Er "); // Paigaldage kaamerad, kes kavatsevad valida chooserintenti.putExtra faile (intent.extra_initial_inents, uus pakkuatlik (caperturent)); // valiku pildil bypassing opactiivityResult meetod, mis helistab starctictionforreSult aktiivsuse meetodile (chooserinter, FileChoser_Resultcode); ) Saak (GetBasecontext (), "Erand:" + E, röstsai.Lukkus_long) .Show ();)) // Openfilechoser android< 3.0 @SuppressWarnings("unused") public void openFileChooser(ValueCallback Uploadmsg) (OpenFilechooser (Uploadmsg, ");) // @supresswarnings (" kasutamata ") avaliku void openfilechaoser (väärtusEcalluck Uploadmsg, string-aktsepteerimine, stringide püüdmine) (Openfilechooser (Uploadmsg, aktsepteerimine);) Avalik Boole onconsoleSage (OnconsoleSessage (cm.Message (), cm.Linenumber (), cm.Sourceid ()); tagasi tõsi) String-sõnum, int linenumber, string allikas) (//log.d ("Androidruntme", "Näita konsooli sõnumeid, mida kasutatakse silumiseks:" + sõnum);); ); // End SetWebChromeclient // Saada tulemus @supresswarnings ("kasutamata") erasektori objekti andmed; @Override kaitstud VOID ONACTIVEACTIVEACTIVIVIVIVIVIVIVIVIVIVIVIVE (INT-Päringukood, INT tulemusKood, kavatsused andmed) (kui (andmed \u003d\u003d null) (tagasipöördumine) (tagastamine) \u003d Filechoser_Resultcode) (kui (null \u003d\u003d this.muploadmessage) (tagastamine;) URI tulemus \u003d null; proovige (kui (tulemusKood \u003d tulemus_ok) (tulemus \u003d null;) muidu (// ekstrakti oma muutujast, kui kavatsus koosneb Zero tulemus \u003d data \u003d\u003d null? Mcapturesimaguri: data.getdata ();)) saak (getapplicationcontext (), "Tegevus:" + e, röstsai.Luklengt_long).) MUPLIVEMESSAGE .ONReceiveValue (tulemus); MuploadMessage \u003d Null;)) // ***************************** avaliku void loading () (röstsai .Maketekst (see, fail on) laaditud donwload kausta ", röstsai.length_short) .Show ();) // @override avalik boolean oncreateoptsionsmenu (menüü menüü) (// // pumbata menüü; see lisab toiminguribale üksusi, kui see on olemas. getMenuin Soome (). Täisav (R.MENU.Main, menüü); Tagasi tõsi; ) // ************************************************ ******** @override avalik boolean onoteteemsemsemed (iten.getitemiid ()) (juhtum android.r.id.home: // Home MwebView.loaduri nupp ("http: // yandex .ru"); TRUE; Case R.ID.ITEM1: // Tagasi mwebview.canngback (); (mwebview.goback ();) Tagasi tõsi; juhtum r.id.Item2: // edasi mwebview.cangoforward (); (mwebview.goforward () ); Tagasi tõsi; Case R.ID.ITEM3: // Reboot MWebView.Reload (); (MWebview.Reload ();) Tagasi tõsi; Case R.ID.ITEM4: // Clee Cache MwebView.Clearcache (TRUE) ; ClearCache (aktiivsus); toast.Maketext (see, "vahemälu on puhas.", Röstsai.Lukles_short) .Kui (); Tagasi tõsi; Case R.ID.ITEM5: MWEBVIEW.CLEARHISTORY (); / / Puhastage ajalugu röstsai.Maketext (see, "Chista ajalugu", röstsam.length_short) .Show (); Tagasi tõsi; Case R.ID.ITEM6: SAVEBM (MWEBVIEW.GEGURL (), MWebview.getTitle ()); / / kes järjehoidja Tagasi tõsi; Case R.ID.ITEM7: // Paneeli järjehoidjad kavatsused kavatsused 1 \u003d Uus kavatsus , SAVEBMACTIVEIVITY.CLASS); Alunduslik fratoryiforresult (kavatsus1, 1); Tagasi tõsi; Case R.ID.ITEM8: // Stop Laadimine MWebView.Stopsing (); Tagasi tõsi; Case R.ID.ITEM9: Pref (); // Seaded Tagasi TRUE; Juhtum r.id.Item10: // ikka tühi tagasipöördumine tõsi; Case R.ID.ITEM11: // Kui (vahemälu \u003d\u003d 2) (vahemälu \u003d\u003d 2) (clcache ();) viimistlus (); Tagasi tõsi; Vaikimisi: tagastage Super.OPTIONSIANSEEMITED (kirje); )) @Supresswarnings ("amortisatsioon") @override avalik void osestroy () (super.ondaTroy (); mwebview.Kloadimine (); mwebview.cluarcache (TRUE); MWebview.ClearView (); MwebView.freememory (); MwebView. Hävita (); MWebView \u003d null;) // clash void clearcachefolder (kontekst.getcachedir ();) void clearcachefolder (faili dir) (kui (dir! \u003d null && dir.isdirectory ()) (proovige (faili laps: dir Lapse failid .Delete ();)) saak (erand E) ()))))

Projekti saab alla laadida

Android võimaldab teil luua oma akna veebilehtede vaatamiseks või isegi brauseri klooni loomiseks objekti abil. Element ise kasutab WebKit mootorit ja neil on palju omadusi ja meetodeid. Me piirame end põhilise näitena taotluse loomisest, millega saame vaadata interneti lehekülgi. Viimastes versioonides kasutatakse kroomi mootorit, kuid selle lihtsate ülesannete jaoks ei ole suurt erinevust.

Loo uus projekt Mybrowser. ja kohe asendada koodi märgistuse faili res / paigutus / tegevus_main.xml:

Nüüd avage tegevusfail Maincerctivity.java. Ja me kuulutame komponendi, samuti initsialiseerida selle - lisada toetus JavaScripti ja määrake leht allalaadimiseks.

Private Webview Webview; Avalik void onCreate (Bundle SavedinstanceState) (Super.OnCreate (SalvediinstanceState); SetcontentView (R.Layout.activity_main); Webview \u003d FindViewbyid (R.ID.Webview); // Võimaldab toetada JavaScript Webview.Metsettings () Setjavascriptenable (TRUE). ; // Määrake Webview.loaduri allalaadimise leht ("http: // saidi / android");)

Kuna rakendus kasutab internetti, peate seadistama luba Interneti-ühenduse avamiseks manifesti failis.

Seal muudame manifesti ekraani joont, eemaldades pealkirja meie taotlusest (esiletõstetud rasv):

android: teema \u003d "@ Style / Theme.appat.Noacturbar">

Alusta rakendus. Meie käsutuses ilmus kõige lihtsamate veebilehtede vaade, kuid ühe puudusega. Kui klõpsate mis tahes lingile, käivitate automaatselt vaikimisi brauseri ja uus leht kuvatakse juba olemas. Täpsemalt oli see enne. Uute seadmete kohta rakenduse käivitamisel avaneb brauser kohe.

Selle probleemi lahendamiseks ja oma programmi avatud linkide lahendamiseks peate klassi tühistama Webviewclient. Ja lubage meie taotlusel lingide töötlemiseks. Lisage investeeritud klass koodis:

Eraklassi MyWeBViewclient laiendab Webviewclient (@targetapi (buildge.version_codes.n) @override avalik boolean pressoverrireadure (webview vaade, webresourcrequest taotluse) (View.loadur (päringu.getsedurl () tostring ()) ;. Tagasi tõsi;) // Vana @override Avalik Boolean ShoulderHoulding (View.loadur (URL); tagastage tõsi;))

Seejärel meetodi onCreate () Koopia Mywebviewclient.. See võib olla kõikjal pärast objekti initsialiseerimist:

Webview.SetWebViewclient (uus MywebViewclient ());

Nüüd meie loodud lisas Webviewclient.mis võimaldab teil alla laadida mis tahes määratud URL-i, mis on valitud konteineris, ja mitte brauseri käivitamist. See funktsionaalsus vastutab meetodi eest, milles me määrame praeguse ja vajaliku URL-i. Tagastamise väärtus tõsi. See viitab sellele, et me ei pea alustama kolmanda osapoole brauserit ja juhtige iseseisvalt lingi sisu. API 24 versioonis on lisatud meetodi ülekoormatud versioon lisanud seda asjaolu.

Käivitage programm ja veenduge, et lingid laaditakse nüüd rakenduses alla. Aga nüüd tekkis teine \u200b\u200bprobleem. Me ei saa eelmisele lehele naasta. Kui me klõpsame seadme tagaküljele, sulgege oma rakendus. Uue probleemi lahendamiseks peame käsitsema nupuga nuppu Tagasi. Lisame uue meetodi:

@Override avalik void onbacpeprested () (kui (webview.cangoback ()) (webview.goback ());) mujal (Super.Onbacprested

Peame kontrollima, et toetab eelmise lehe navigeerimist. Kui seisund on tõsi, siis nimetatakse meetodit mine tagasi ()mis tagastab meid eelmisele lehele ühe sammu tagasi. Kui on mitmeid selliseid lehekülgi, siis saame järjekindlalt tagasi esimesele lehele. Sel juhul tagastab meetod alati väärtus. tõsi.. Kui me naaseme esimesele lehele, millega reisimine internetis algas, on väärtus tagasi. vale Ja tagasilöögi nupu tagamise nupp on juba süsteemi ise, mis sulgeb rakenduste ekraani.

Käivitage rakendus uuesti. Sul on oma veebibrauser, mis võimaldab teil minna lingidele ja naasta eelmisele lehele. Olles dokumentatsiooni õppinud, saate oma brauserile varustada rakenduse ja teisi maitsvaid kuklid.

Kui teil on vaja osa linkidest, mis viib teie saidi avamiseks brauseris avamiseks ja kohalike linkide avamiseks rakenduses kohalikud lingid, siis rakendage erineva tagastatud väärtustega seisundit.

Avalik klass MyWeebViewclient laiendab Webviewclient (@override avalik Boolaan Shoulirosage (URI (URL), Uri.Parse (URL)); View.getContext (). Starterity (kavatsus);

Universaalne meetod, et kõik kohalikud lingid avanevad rakenduses, ülejäänud brauseris (ühe rea vahetamine):

Avalik klass MyAppwebViewclient laiendab Webviewclient (@override Avalik Boolean Shoulirolouliroloading (Webview View, String URL) ( iF (URI.PARSE (URL) .GETHOST () Pikkus () \u003d\u003d 0) (Tagasi vale;) kavatsuse tahtmine \u003d uus kavatsus (intent.action_view, Uri.Parse (URL)); View.getContext (). starterity (kavatsus); Tagasi tõsi; )

Ja nüüd vähe keeruliseks näide, nii et kasutaja on alternatiiv standard brauserid.

Selleks, et olla selgemaks, uuendame eeskuju järgmiselt. Luua kaks tegevust. Esimeses tegevuses asetage nupp teisele aktiivsusele vahetamiseks ja komponendi teisele aktiivsusele.

Manifestis määrame teise tegevuse eest filtri.

Teisele aktiivsusele ülemineku nupu kood.

Avalik void onclick ("kavatsusest intensiivse \u003d uus kavatsus"; kavatseb.setdata (Uri.Parse ("http: // Site / Android /")); starteriivsus (kavatsus);)

Oleme loonud oma kavatsuse filtri ja andis andmed - aadress saidi.

Teine tegevus peaks võtma andmeid:

Pakett ru.alexanderklimov.Tapplication; Import android.net.uri; Import android.support.v7.app.appcompactivity; Import android.os.blunle; Import android.webkit.webView; Importida android.webkit.webviewclient; Avaliku klassi parlamentaktiivsus laiendab AppCompatactivity (SavedinstanceState); SetcontentView (R.Layout.ActiveVity_Second); URI URL \u003d GetStunt (). Getdata (); Webview Webview \u003d FindViewbyid (R.ID.Webview); Webview.StewebViewclient (uus tagasihelistamise ()); Webview.loadurl (URL.Tostring ()); ) Eraklassi tagasihelistamise laiendab Webviewclient (@override Avalik Boolean Shoulirounding (tagastamine (FALSE);))))

Teise tegevuse filtril märkisime kahte tegevust.

See tähendab, et iga tegevus (lugemis-, rakendusi) võivad põhjustada teie tegevust minibrauseriga vastavalt samale põhimõttele. Alusta stuudios eraldi aknas iga vana projekt või luua uus ja lisage nupp ja kirjutage sama koodi, mida me kasutasime nupule klõpsamiseks.

Käivitage teine \u200b\u200brakendus (esimene rakendus saab sulgeda) ja klõpsa nupule. Te ei alusta esimest rakendust esialgse ekraaniga, vaid kohe teise aktiivsusega minibrauseriga. Seega võib iga rakendus alustada brauserit, ei tea oma tegevuse klassi nime, vaid kasutage ainult stringi "Ru.alexanderklimov.Browser"edastatud B. Kavatsus. Samal ajal peab teie tegevus brauseriga olema vaikimisi kategooria ja andmed. Lubage mul teile meelde tuletada:

Saate oma stringi esitada stringi konstantse vormis ja teavitab kõiki teie brauseri potentsiaalseid kasutajaid, sest nad saavad seda käivitada. Aga Androidil on juba selline valmis konstantne Action_View.mis dokumentatsiooni abil on järgmine:

Avaliku staatiline lõplik java.lang.string action_view \u003d "android.intent.action.View";

Ma kirjutan teise taotluse nupu koodi ümber

Kavatsus (android.content.intent.action_view, Uri.Parse ("http: // sait / android /"); Starteriivsus (kavatsus);

Mis seekord juhtub? Me mäletame, et meil on kaks tegevust, sealhulgas android.intent.action.View.. Niisiis, meie esimene rakendus brauseriga peaks ka seda käsku ka tunnustama, kui kasutaja kasutab seda koodi. Emulaatoris on vähemalt üks selline programm "brauser" ja nüüd on meie teine \u200b\u200btegevus esimesest rakendusest lisatud. Ekraanile ilmuvad kahe rakenduse valik.

Ja kui kustutate kõik alternatiivsed brauserid ja jätta ainult teie programm, siis ei ole valik. Teie brauser on peamine. Ja kui mõned rakendused tahavad alustada veebilehte määratud viisil, avaneb teie programm.

Väike märkus. Kui asendate viimane rida sellisele:

Starteriivsus (kavatsus.createchooser (kavatsus, "meow ..."));

Programmi valikuaknas ilmub teie rida tippjoon "avatud" või selle kohaliku tõlke asemel. Aga see ei ole peamine asi. Kui mingil põhjusel ei ole seadet brauserit, siis see koodi valik ei põhjusta rakenduse kokkuvarisemist erinevalt algsest valikust. Seetõttu kasutage kavandatavat võimalust usaldusväärsuse huvides.

Loome uue rakenduse - brauseri Android-seadmete jaoks, oma kätega, see on huvitav ja koodil pole palju.

Android brauseri rakendus

Alusta Android Studio ja luua uus projekt, rakenduse nimi Minu sait, ettevõtte domeen teie äranägemisel sisestasin saidi domeeni saidi. Me klõpsame järgmises vahekaardil järgmisel, jätke kõik ilma muutmata, klõpsake nuppu Edasi, seejärel juba valitud Tühi tegevus, Ma jätan selle, siis viimases vahekaardil ma muudab paigutuse nime aktiivsuse_main peamine ja vajutage viimistlust.

Android Studio. Projekti failide valmistamine, see võtab aega. Peaakna avab kaks faili, main.xml. ja Maincerctivity.java.Alustame viimasel töötamist. Muuda laiendatud appcompompactiivity tegevust, hoidke.

Lubade lisamine ilmneb

Seejärel avage fail Androidmanifest.xml. ja lisage pärast esimest osa kasutaja luba kasutaja-luba,

mida meie rakendusel oleks juurdepääs internetile. Salvesta ja sulgege androidmanifest.xml.

Mine faili. Main.xml.See on teel Res / Layout / Main.xml, kustutage Android string: Text \u003d "Tere sõna!" Täielikult muutke Webview TextView, peamise kihi relativelayout'i omadustest eemaldage tarbetud taandurid (Paddingbottom, Poldingleft, PaddingRight, PadingTop).

Webview lisamiseks Android vara: ID \u003d "@ + ID / Webview", Muuda Android: Layout_Width \u003d "Wrap_Content" ja Android: Layout_Height \u003d "Wrap_Content" Android: Layout_Parent \u003d "Match_parent" ja Android: Layout_ehent \u003d "Match_parent" jaoks Mis meie element Webview oli kogu ekraanil.

Koodid loogika Java

Main.xml-faili abil lõpetasime, liigume Maincerctivity.java.. Lisa muutuja wV. Tüüp Webview.Me määrame selle elemendi, leides selle leidmisega FindViewbyid () funktsiooni abil, kirjeldame WV-seadeid, eelkõige Java skriptide WV-ekraanil, määrake meie brauseri saidi allalaadimise aadressi, käivitan Yandexi, rakendan LanderTL-funktsiooni (" http: // ya.ru ").

avaliku klassi mainekuse laiendab tegevust (Webview WV; @override kaitstud void onCreate (Super.onCreatiinstance) (SUPER.ONCREADATE); SetcontentView (R.Layout.main); WV \u003d (Webview) FindViewbyid (R.ID.Webview); Veebid Seaded \u003d wv.getsette (); seaded

Samuti alltoodud me kirjutame käitlemise vajutage nuppu Tagasi seadmesse.

@Override avalik void onbacpepress () (kui (wv.cangoback ()) (wv.goback ();) mujal

Käivitage rakendus emulaatoris

Vajutage nuppu Start, see on tööriistaribal roheline kolmnurk AndroidStudio.Meie emulaator algab ja kui kõik on tehtud õigesti, hakkab YANDEX-otsing brauseris, saate virtuaalsele klaviatuurile panna ja midagi otsida, kõik toimib hästi.

Sulgege programm ilma emulaatorita sulgemata, klõpsates punase ristkülikuga, see peatub alguse asemel, muuta aadress suvaliseks, i "propiaria" minu sait "https: // sait",

klõpsake nuppu Salvesta ja uuesti käivitage seekord, seekord kõik juhtub kiiremini, saidi ümber liikumine Androidi programmeerimisosas on artiklid ja videod AndroidStudio installimise ja seadistamise seadistamiseks android-emulaatoriks ja programmide lihtsateks näideteks.

Täistekst Androidmanifest.xml

Täiste tekst Main.xml

Täisteksti maine.java.

pakett ru.maxfad.mysite; Importida android.app.aktiivsus; Import android.os.blunle; Import android.webkit.Webseettings; Import android.webkit.webView; Importida android.webkit.webviewclient; Avaliku klassi mainekuse laiendab tegevust (Webview WV; @override kaitstud void onCreate (Super.onCreatiinstance) (SUPER.ONCREADATE); SetcontentView (R.Layout.main); WV \u003d (Webview) FindViewbyid (R.ID.Webview); Veebid Seaded \u003d wv.getsettings (); Seaded ) Muud (Super.On Ackerpressioon ();))))

Selles videos näidatakse üksikasjalikult, kuidas luua android-seadmete brauserirakendus:

Oleme juba alustanud end täielikult turvaliselt isikliku tarkvaraga, pidage meeles meie imelist kalkulaatorit ja konverterit. Ja selles õppetund, me õpime, kuidas luua lihtne brauser, mille abil lükake Interneti-ruumid. Nõustuge, surfage võrku oma brauserile - see on meeldivam kui see ooper või kroomi tegemine (vaevalt mugavam, kuid meeldivam :)). Loo uus projekt, nimed traditsiooniliselt valida ise. Isiklikult ma üldiselt ei loo kõike alates nullist iga kord, aga ma lihtsalt avan, mis on, ja ma puhastasin kogu koodi algse oleku tühja tegevuse. Tehke, kui mugavam teile.

Seega kirjeldage lühidalt järelmeetmete mahtu ja spetsiifikat. Me peame looma üksuse Kui see juhtub, et kirjutada koodi, mis loob meie isikliku veebibrauseri, et varustada selle põhifunktsioonidega, määrata luba kasutada Interneti kasutamiseks meie rakendusega manifesti failis ja kirjutage riistvara nupp käitleja "Tagasi" Seadmel (see tähendab, mis juhtub meie brauseris, kui klõpsate selle nupule).

Alustame. Avage fail tegevus_main.xml.. Luua seal üks üks element Oleme piisavalt, et me rakendame veebibrauseri rakendamist:

< WebView xmlns: android= "http://schemas.android.com/apk/res/android" Android: paigutus_height \u003d "Match_parent" android: paigutus_width \u003d "Match_parent" android: id \u003d "@ + ID / web" /\u003e

Märgistuse aken näeb välja selline:

Pärast seda saame faili kohe aru Androidmanifest.xml.. Avame selle ja lisame seal kaks rida, üks on Interneti kasutamise luba luba, teine \u200b\u200bon rakenduse stiili muutmine ja rakenduse "pealkirja" paneeli muutmine (paneelide päisega) Eesmärgiga pakkuda brauseri aknale rohkem ruumi lehekülgede kuvamiseks.

Kirjutame Interneti kasutamiseks loata enne Lag ...:

< uses- permission android: name= "android.permission.INTERNET" / >

Nüüd lisage meie seadistusse Tegevuskäsk peitmiseks pealkirja (alumine joon, mis on esile tõstetud rasva, asub ka Androidmanifest.xml.):

< activity android: name= ".MainActivity" android: label= android: teema \u003d "@android: stiil / teema.notitlebar" >

Nüüd mine kõige olulisem ja vastutustundliku osa töö - kirjutades Java-koodi. Avage maincractivity.java fail ja kirjuta järgmised (selgitused on esitatud koodis pärast märke //, kes ei märgata):

pakett Home.MyApplication; Importida android.app.aktiivsus; Import android.app.AlertDialog; Import android.content.Contentvaluues; Importida android.content.intenti; Import android.daatabase.cursor; Import android.daatabase.sqlite.sqledatabas.; Import android.database.sqlite.sqliteopenhelper.; Import android.support.v7.app.Kahul; Import android.os.blunle; Import android.util.log; Import android.view.KeieVent; Import android.view.menu; Import android.view.Menuitem; Import android.view.View; Import android.webkit.webView; Importida android.webkit.webviewclient; Import android.widget.button; Import android.widget.editText; Import android.widget.radiobutton; Import android.widget.TextView; Avaliku klassi mainivaraktiivsus laiendab tegevust ( // kuulutada muutuva tüübi Webview Private Webview MWEB; // luua tüüpi veebibrauseri (Webviewclient), mis on konfigureeritud // Vaikimisi luba kõikide linkide töötlemiseks selles klassis, // viitamata kolmanda osapoole programmide: Private Class Webviewer laiendab Webviewclient ((Webview View, String URL) (Vaata Loadurl (URL); Tagasi tõsi;)) Avalik tühine onCreate (Bundle SavedinstanceState) (Super OnCreate (SalvedinstanceState);). // siduge Webview'i väljakuulutatud muutuja meie loodud USA loodud // Webview objekt tegevuses_main.xml faili: MWeb \u003d (webview) FindViewbyid (R. ID. Veeb); // Me ühendame selle elemendiga Java skripte: MWEB. Jõuab (). SEATJAVASCIPIFIPTER (TRUE); // konfigureerige leht, mis alla laaditakse käivitamisel, saate sisestada mis tahes: MWEB. Loadurl ( "http://developeroleg.ucoz.ru/"); // Brauseri kohandamine meie Webview elemendi jaoks ühendame ülaltoodud // veebitasi, kellega lehekülgi vaadatakse: MWEB. SetWebviewclient (uus webviewer ()); ) // Me kirjutame töötlemisjuhendi vajutamiseks seadme tagaküljele, mis võimaldab meil klõpsata // nupule "Tagasi", mine eelmisele lehele ja mitte ainult rakenduste sulgemiseks. // See sulgeb nupu "Tagasi" ainult siis, kui me oleme algamas // lehel, mis on eespool märgitud: @Override avalik void onbacpepressed () (kui (MWeb. Cangoback ()) (MWEB. Gaback ();) muu (Super. OnBacpeprested ();)))))))

See on kõik! Tegelikult kõik on üsna lihtne ja pärast lühikest tööd on meil oma brauser, muidugi on üsna lihtne ja ei ole võimalusi, vaid mõista sisuliselt loomise selliste rakenduste, see on üsna piisav.