Jak vytvořit svůj vlastní prohlížeč pro Android. Nejlepší prohlížeče pro Android. Spuštění aplikace v emulátoru


V této lekci:

Psaní jednoduchého prohlížeče

V minulé lekci jsme viděli, že pokud zavoláme Úmysl S akce= ACTION_VIEW A data= Uri- objekt s http-adresa, pak to začne prohlížeč a zobrazí obsah stránky na této http adrese. Můžeme nezávisle vytvořit jednoduchý prohlížeč, který na takový Záměr zareaguje a stránku jednoduše zobrazí. Chcete-li to provést, musíte nakonfigurovat Filtr záměru a použijte komponentu WebView.

Na první obrazovce aplikace budeme mít tlačítko, které odešle Intent. Druhá obrazovka bude mít WebView.

Pojďme vytvořit projekt:

Název projektu: P0321_SimpleBrowser
Sestavit cíl: Android 2.3.3
Název aplikace: SimpleBrowser
Název balíčku: ru.startandroid.develop.p0321simplebrowser
Vytvořit aktivitu: Hlavní aktivita

Pojďme kreslit main.xml


xmlns:android=
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

Na obrazovce je jen tlačítko

Kód MainActivity.java:

balík

Importovat android.app.Activity;
importovat android.content.Intent;
importovat android.net.Uri;
import android.os.Bundle;
importovat android.view.View;
importovat android.view.View.OnClickListener;

Veřejná třída MainActivity rozšiřuje aktivitu (
/** Volá se při prvním vytvoření aktivity. */
@Přepsat
public void onCreate(Bundle savedInstanceState) (

setContentView(R.layout.main);

(findViewById(R.id.btnWeb)).setOnClickListener(new OnClickListener() (
@Přepsat
public void onClick(View v) (
startActivity (nový záměr (Intent.ACTION_VIEW, Uri.parse ("http://www.ya.ru")));
}
}) ;
}
}

Kód je trochu neobvyklý. Upozorňujeme, že objekt třídy nikde nepopisuji Tlačítko. Metoda findViewById se vrací Pohled a toto Pohled podporuje metodu setOnClickListener kterému říkám. A v metodě setOnClickListener Vytvářím objekt, který implementuje rozhraní OnClickListener a do něj napíšu kód onClick. Také vytvářím objekt Úmysl ne samostatně, ale přímo v metodě startActivity. Kódu bylo méně než obvykle. Možná vám tato možnost bude vyhovovat.

Vytvořme druhou aktivitu. Nejprve soubor rozložení browser.xml:


xmlns:android= "http://schemas.android.com/apk/res/android"

android:layout_height="match_parent"
android:orientation="vertical" >
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" >

Komponenta na obrazovce WebView.

tvoříme BrowserActivity.java:

balík ru.startandroid.develop.p0321simplebrowser;

Importovat android.app.Activity;
importovat android.net.Uri;
import android.os.Bundle;
importovat android.webkit.WebView;

Veřejná třída BrowserActivity rozšiřuje aktivitu (

@Přepsat
protected void onCreate (Bundle savedInstanceState ) (
super.onCreate(savedInstanceState);
setContentView(R.layout.browser);

WebView webView = (WebView) findViewById(R.id.webView);
Uri data = getIntent().getData();
webView.loadUrl(data.toString());
}
}

Definujeme WebView, číst data z Úmysl a předat to dál čára PROTI WebView.

Teď si to zapišme Aktivita PROTI manifest. K tomu budeme muset přidat Úmysl Filtr, uveďte v něm akce = ACTION_VIEW. A pro data vidíme několik parametrů, které používáme Systém= http.

To znamená, že Uri objekt v Úmysl musí obsahovat http adresu.

Nezapomeň na Kategorie= Výchozí. Označení pro BrowserActivity zadejte např. Můj prohlížeč.

Také v manifestu musíte přidat Používá oprávnění = android.permission.INTERNET na kartě Oprávnění. Aby systém umožnil aplikaci přístup k internetu.


Vše uložíme a spustíme aplikaci. Stiskneme tlačítko a vidíme výběr: systém nám nabízí výběr systémový prohlížeč A náš,právě vyrobeno. Tito. Úmysl s požadavkem na zobrazení http adresy nalezené v systému dvaČinnost, která v jejich Úmysl Filtr uvedli, že mohou zobrazovat adresy http.


Vyberte náš Můj prohlížeč a podívejte se na stránku.


To jsme viděli Aktivita v našich aplikacích mohou proces nejen náš vynalezl akci, ale také systémové. A tím vytvořit alternativu k systémovým aplikacím.

Ale jak jistě chápete, mohli bychom snadno nepoužívat WebView v naší Aktivitě a nezobrazovat stránku. Bylo možné použít TextView a jednoduše zobrazit adresu z dat jako text. Nebo kód http požadavek, který by tuto stránku stáhl a zobrazil její html obsah. Na http adresu jsme mohli úplně zapomenout a ukázat nějaký levý obrázek nebo jen tmavou obrazovku.

Tito. můžete pro Aktivitu vytvořit Intent Filter, který systému řekne, že aplikace něco umí, ale zároveň uvnitř Aktivity budou nějaké nesmysly. To jsou již otázky programátorské etiky, zdravého rozumu a přiměřenosti)

Úplný kód souboru manifestu:


"http://schemas.android.com/apk/res/android" balíček = "ru.startandroid.develop.p0321simplebrowser" android:versionCode="1" android:versionName="1.0" >






"android.intent.category.LAUNCHER">






"android.intent.category.DEFAULT">



V další lekci:

Ukládání dat pomocí předvoleb

Android umožňuje vytvořit si vlastní okno pro prohlížení webových stránek nebo dokonce vytvořit vlastní klon prohlížeče pomocí prvku. Samotný prvek využívá engine WebKit a má mnoho vlastností a metod. Omezíme se na základní příklad vytvoření aplikace, pomocí které si můžeme prohlížet stránky na internetu. Nejnovější verze používají engine Chromium, ale pro jednoduché úkoly v tom není velký rozdíl.

Pojďme vytvořit nový projekt Můj prohlížeč a okamžitě nahraďte kód v souboru značek res/layout/activity_main.xml:

Nyní otevřeme soubor aktivity MainActivity.java a deklarovat komponentu a také ji inicializovat - povolit podporu JavaScriptu a určit stránku, která se má načíst.

Private WebView webView; public void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = findViewById(R.id.webView); // povolení podpory JavaScriptu webView.getSettings().setJavaScriptEnabled(true) ; // specifikujte stránku stahování webView.loadUrl("http://site/android");

Protože aplikace bude používat internet, musíte v souboru manifestu nastavit oprávnění k přístupu k internetu.

Tam v manifestu upravíme řádek pro obrazovku odstraněním názvu z naší aplikace (tučně):

android:theme="@style/Theme.AppCompat.NoActionBar">

Spustíme aplikaci. Nyní máme k dispozici jednoduchý prohlížeč webových stránek, ale s jednou nevýhodou. Pokud kliknete na jakýkoli odkaz, automaticky se spustí váš výchozí prohlížeč a zobrazí se zde nová stránka. Přesněji řečeno, dříve to tak bylo. Na nových zařízeních se po spuštění aplikace okamžitě otevře prohlížeč.

Chcete-li tento problém vyřešit a otevřít odkazy ve vašem programu, musíte přepsat třídu WebViewClient a nechte naši aplikaci zpracovat odkazy. Pojďme do kódu přidat vnořenou třídu:

Soukromá třída MyWebViewClient rozšiřuje WebViewClient ( @TargetApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(Zobrazení WebView, požadavek WebResourceRequest) ( view.loadUrl(request.getUrl().toString()); return true; ) // For stará zařízení @Override public boolean shouldOverrideUrlLoading(WebView view, String url) ( view.loadUrl(url); return true; ) )

Pak v metodě onCreate() pojďme definovat instanci MyWebViewClient. Může být umístěn kdekoli po inicializaci objektu:

WebView.setWebViewClient(new MyWebViewClient());

Nyní v naší aplikaci vytvořené WebViewClient, který umožňuje načíst libovolnou zadanou adresu URL vybranou v do samotného kontejneru, místo aby bylo nutné spouštět prohlížeč. Za tuto funkcionalitu je zodpovědná metoda, ve které specifikujeme aktuální a požadovanou URL. Návratová hodnota věrný znamená, že nemusíme spouštět prohlížeč třetí strany, ale nezávisle stáhneme obsah z odkazu. Ve verzi API 24 byla přidána přetížená verze metody, berte to prosím v úvahu.

Znovu spusťte program a ujistěte se, že odkazy jsou nyní načteny v samotné aplikaci. Nyní se ale objevil další problém. Nemůžeme se vrátit na předchozí stránku. Pokud na našem zařízení stiskneme tlačítko ZPĚT, jednoduše naši aplikaci zavřeme. K vyřešení nového problému musíme zvládnout stisknutí tlačítka ZPĚT. Přidat novou metodu:

@Override public void onBackPressed() ( if(webView.canGoBack()) ( webView.goBack(); ) else ( super.onBackPressed(); ) )

Musíme zkontrolovat, co podporuje navigaci na předchozí stránku. Pokud je podmínka pravdivá, je zavolána metoda goBack(), která nás vrátí o krok zpět na předchozí stránku. Pokud existuje několik takových stránek, můžeme se postupně vrátit na úplně první stránku. V tomto případě metoda vždy vrátí hodnotu věrný. Když se vrátíme na úplně první stránku, ze které jsme začali naši cestu na internetu, hodnota se vrátí falešný a stisknutí tlačítka ZPĚT zpracuje systém sám, čímž se obrazovka aplikace zavře.

Spusťte aplikaci znovu. Nyní máte svůj vlastní webový prohlížeč, který vám umožní sledovat odkazy a vracet se na předchozí stránku. Po prostudování dokumentace můžete aplikaci vybavit dalšími chutnými vychytávkami pro váš prohlížeč.

Pokud potřebujete, aby některé odkazy vedoucí na váš web byly otevřeny v prohlížeči a místní odkazy byly otevřeny v aplikaci, použijte podmínku s různými návratovými hodnotami.

Veřejná třída MyWebViewClient rozšiřuje WebViewClient ( @Override public boolean shouldOverrideUrlLoading(WebView view, String url) ( if(Uri.parse(url).getHost()..ACTION_VIEW, Uri.parse(url)); view.getContext().startActivity (záměr vrátit true);

Univerzální metoda, která otevře všechny místní odkazy v aplikaci, zbytek v prohlížeči (změníme jeden řádek):

Veřejná třída MyAppWebViewClient rozšiřuje WebViewClient ( @Override public boolean shouldOverrideUrlLoading (Zobrazení WebView, String url) ( if(Uri.parse(url).getHost().length() == 0)( return false; ) Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

view.getContext().startActivity(intent);

vrátit true;

))

Nyní si příklad trochu zkomplikujeme, aby měl uživatel alternativu ke standardním prohlížečům.

Aby to bylo jasnější, uspořádejme příklad následovně. Vytvořte dvě aktivity. Na první aktivitu umístěte tlačítko pro přechod na druhou aktivitu a na druhou aktivitu umístěte součást.

V manifestu určíme filtr pro druhou aktivitu.

Kód tlačítka pro přechod na druhou aktivitu.

Public void onClick(View view) ( Intent intent = new Intent("ru.alexanderklimov.Browser"); intent.setData(Uri.parse("http://site/android/")); startActivity(intent); ) Vytvořili jsme vlastní záměr s filtrem a poskytli data – adresu webu. Druhá aktivita by měla přijímat data:

Balíček ru.alexanderklimov.testaplikace; importovat android.net.Uri; importovat android.support.v7.app.AppCompatActivity; importovat android.os.Bundle; importovat android.webkit.WebView; importovat android.webkit.WebViewClient; veřejná třída SecondActivity rozšiřuje AppCompatActivity ( @Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_second);

Uri url = getIntent().getData();

WebView webView = findViewById(R.id.webView); webView.setWebViewClient(new Callback()); webView.loadUrl(url.toString()); Úmysl) soukromá třída Callback rozšiřuje WebViewClient ( @Override public boolean shouldOverrideUrlLoading (zobrazení WebView, String url) ( return(false); ) ) )

Svůj řetězec můžete reprezentovat jako řetězcovou konstantu a sdělit tak všem potenciálním uživatelům vašeho prohlížeče, jak si jej mohou sami spustit. Android už ale takovou hotovou konstantu má ACTION_VIEW, který je podle dokumentace následující:

Veřejné statické finále java.lang.String ACTION_VIEW = "android.intent.action.VIEW";

Přepišme kód pro tlačítko ve druhé aplikaci

Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://site/android/")); startActivity(záměr);

Co se stane tentokrát? Pamatujeme si, že máme předepsané dvě akce, včetně android.intent.action.VIEW. To znamená, že naše první aplikace s prohlížečem musí tento příkaz také rozpoznat, když některá uživatelská aplikace používá tento kód. Emulátor má alespoň jeden takový program „Browser“ a nyní k němu přibyla naše druhá aktivita z první aplikace. Na obrazovce se objeví výběr ze dvou aplikací.

A pokud smažete všechny alternativní prohlížeče a necháte jen svůj program, tak nebude na výběr. Váš prohlížeč se stane hlavním. A pokud nějaká aplikace chce spustit webovou stránku zadaným způsobem, otevře se váš program.

Malá poznámka. Pokud nahradíte poslední řádek tímto:

StartActivity(Intent.createChooser(intent, "Mňau..."));

Poté se v okně výběru programu místo horního řádku „Otevřít pomocí“ nebo jeho místního překladu objeví váš řádek. Ale to není to hlavní. Pokud z nějakého důvodu v zařízení není jediný prohlížeč, pak tato verze kódu nezpůsobí pád aplikace, na rozdíl od původní verze. Z důvodu spolehlivosti proto použijte navrhovanou možnost.

Již jsme se začali plně poskytovat osobním softwarem, pamatujte si na naši skvělou kalkulačku a převodník. A v této lekci se naučíme, jak vytvořit jednoduchý prohlížeč, se kterým budete surfovat po internetu. Souhlasíte, surfování na webu ve vlastním prohlížeči je mnohonásobně příjemnější než v Opeře nebo Chrome (stěží pohodlnější, ale příjemnější :)). Vytváříme nový projekt, jména si tradičně vybírejte sami. Osobně pokaždé nevytvářím vše od nuly, ale jednoduše otevřu, co mám, a vyčistím veškerý kód do původního stavu prázdné aktivity. Udělejte to, co je pro vás nejpohodlnější.

Pojďme si tedy stručně nastínit rozsah a specifika následné práce. Potřebujeme vytvořit prvek , ve kterém se vše bude dít, napsat kód, který vytvoří náš osobní webový prohlížeč, vybavit jej základními funkcemi, zaregistrovat oprávnění pro naši aplikaci k používání internetu v souboru manifestu a napsat obslužný program stisknutí hardwarového tlačítka "Zadní" na zařízení (tedy co se stane v našem prohlížeči, když klikneme na toto tlačítko).

Začněme. Otevření souboru activity_main.xml. Vytváříme tam jeden jediný prvek , což je docela dost na to, abychom implementovali webový prohlížeč:

< WebView xmlns: android= "http://schemas.android.com/apk/res/android" android: layout_height= "match_parent" android: layout_width= "match_parent" android: id= "@+id/web" />

Okno rozložení bude vypadat takto:

Poté se okamžitě vypořádejme se souborem AndroidManifest.xml. Otevřete ji a přidejte tam dva řádky, jedním je povolení aplikace používat internet, druhým je změna stylu aplikace, respektive skrytí panelu „Název“ aplikace (panel s názvem aplikace) v pořadí poskytnout oknu prohlížeče více prostoru pro zobrazení stránek.

Píšeme řádek pro povolení používat internet na otevírací štítek ...:

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

Nyní přidáme do řádku nastavení našeho Aktivita příkaz pro skrytí záhlaví (spodní řádek tučně, toto je také v AndroidManifest.xml):

< activity android: name= ".MainActivity" android: label= android: téma= "@android:style/Theme.NoTitleBar" >

Nyní přejděme k nejdůležitější a nejodpovědnější části práce – psaní java kódu. Otevřete soubor MainActivity.java a napište následující (vysvětlení jsou uvedena v kódu za znaky //, pro ty, kteří si toho nevšimli):

balíček domů.moje aplikace ; importovat android.app.Activity ; import android.app.AlertDialog ; importovat android.content.ContentValues ​​​​; importovat android.content.Intent ; importovat android.database.Cursor ; importovat android.database.sqlite.SQLiteDatabase; importovat android.database.sqlite.SQLiteOpenHelper; importovat android.support.v7.app.ActionBarActivity; import android.os.Bundle ; import android.util.Log ; import android.view.KeyEvent ; import android.view.Menu ; import android.view.MenuItem ; import android.view.View ; importovat android.webkit.WebView ; import android.webkit.WebViewClient ; importovat android.widget.Button ; import android.widget.EditText ; importovat android.widget.RadioButton; import android.widget.TextView ; veřejná třída MainActivity rozšiřuje aktivitu ( // Deklarujte proměnnou typu WebView soukromý WebView mWeb; // Vytvoříme třídu typu Webový prohlížeč (WebViewClient), kterou nakonfigurujeme // ve výchozím nastavení oprávnění zpracovávat všechny odkazy v této třídě, // bez použití programů třetích stran: privátní třída WebViewer rozšiřuje WebViewClient ( (zobrazení WebView , String url ) ( view. loadUrl(url); return true ; ) ) public void onCreate (Bundle SavedInstanceState ) ( super. onCreate(savedInstanceState); setContentView(R . layout. activity_main); // Svázat deklarovanou proměnnou typu WebView s proměnnou, kterou jsme vytvořili // k prvku WebView v souboru activity_main.xml: mWeb= (WebView )findViewById(R . id. web); // Povolujeme podporu skriptů Java pro tento prvek: mWeb. getSettings(). setJavaScriptEnabled(true); // Nastavte stránku, která se načte při spuštění, můžete zadat libovolné: mWeb. loadUrl( "http://developeroleg.ucoz.ru/"); // Nastavte prohlížeč pro náš prvek WebView, připojte ten, který jsme vytvořili výše // Webový klient, pomocí kterého budou stránky prohlíženy: mWeb. setWebViewClient(new WebViewer()); ) // Na zařízení napíšeme kód pro zpracování kliknutí na tlačítko zpět, které nám umožní stisknout // použijte tlačítko "Zpět" pro přechod na předchozí stránku místo pouhého zavírání aplikací. // Zavře se tlačítkem "Zpět" pouze pokud jsme na úvodní stránce // stránka uvedená výše:@Override public void onBackPressed() ( if (mWeb. canGoBack()) ( mWeb. goBack();) else ( super. onBackPressed(); ) ) )

To je vše! Ve skutečnosti je vše docela jednoduché a po nějaké práci máme vlastní prohlížeč, samozřejmě je docela jednoduchý a nemá žádné možnosti, ale to je docela dost k pochopení podstaty vytváření takových aplikací.

Vážení, jsem student bca. Musím udělat jeden projekt za poslední semestr. Tak jsem se rozhodl vytvořit webovou aplikaci, která běží na Android OS, ale jsem pro tuto aplikaci. Může mi s tím tedy někdo pomoci. Již jsem nainstaloval všechny potřebné nástroje jako jdk, android sdk 3.0, eclipse. Teď ale netuším, kde bych měl začít s vývojem prohlížeče. Tak mi prosím pomozte... Na tento projekt mám jen 2 měsíce. Takže je to možné za 2 měsíce nebo ne?

Záleží na tom, co myslíš pod pojmem design prohlížeče...

Vývoj prohlížeče + vykreslovacího enginu od začátku je hodně práce, ale můžete snadno vytvořit prohlížeč založený na Androids WebView pomocí WebViewClient a vytvořit nové uživatelské rozhraní změnou způsobu interakce uživatele s prohlížečem.

Webview má nejrůznější háčky pro zachycení interakcí prohlížeče, takže jej můžete snadno rozšířit. Můžete například umožnit uživateli převracet stránky (např. google fastflip), experimentovat s 3D mapováním vykreslené webové stránky do prostoru OpenGL (např. prohlížeč sphere) atd.

Pro začátek se podívejte na blog Alexandra Kmetka a jeho projekt Mosambro, který rozšiřuje prohlížeč Android o podporu mikroformátů.

Zní to jako opravdu velký projekt, takže nemůžete začít od nuly a nahrát to. Měli byste si udělat plán, jak chcete všechny části implementovat, zapsat si diagramy tříd atd. Pokud studujete informatiku, určitě jste o tom v předchozích semestrech slyšeli.

Nejprve si musíte položit otázku, zda je tento projekt možný Jak můžete vidět z komentářů, většina lidí se shoduje, že byste tento úkol neměli podcenit!

Opravdu doporučuji, abyste pochopili rozsah tohoto úkolu, zde je zdrojový kód prohlížeče Android, který vám dává představu o jeho složitosti.

Vytvoření základního prohlížeče by mohlo být provedeno za den nebo dva pro ty, kteří mají zkušenosti s vývojem pro Android, stejně jako jiní uvedli, že WebView poskytuje téměř vše, co potřebujete k zobrazení webové stránky. Existuje několik nastavení pro JavaScript a další funkce ke kontrole a poté po označení hlavního textového pole pro adresu URL a tlačítka Přejít, což je v podstatě hlavní webový prohlížeč.

Skutečná práce přichází ve všech pokročilých nastaveních. Sestavit prohlížeč, který bude konkurovat velkým chlapům, může být pro jednoho člověka za pár měsíců trochu obtížné, ale vytvořit něco vlastního, co funguje, je velmi možné. Pokus!

Chcete-li vytvořit kompletní webový prohlížeč v systému Android, použijte WebView.

Jednoduchá vazba kódu:

WebView wv = (WebView)findViewById(R.id.webview1); wv = (WebView) findViewById(R.id.webView1); wv.loadUrl("http://www.apsmind.com");




Nahoru