Wir schreiben einen vollwertigen Browser für Android. WebView – Erstellen Sie Ihren eigenen Browser. Starten einer Anwendung in einem Emulator

💖 Gefällt es dir? Teilen Sie den Link mit Ihren Freunden

Ich habe vor nicht allzu langer Zeit angefangen, Android-Programmierung zu lernen. Nachdem Eclips mein erstes Hello Word produziert hatte, wollte ich sofort mehr: Es entstanden viele Pläne und grandiose Ideen. Eine solche Idee war, einen eigenen Browser zu schreiben. Ich denke, dass viele beginnende Programmierer diesen Wunsch hatten. Hier sind die Anforderungen, die ich gestellt habe, und was am Ende passiert ist.

  • Das Programm sollte Links öffnen globales Netzwerk, frei durch Seiten vorwärts und rückwärts bewegen;
  • Sie können Dateien herunterladen und wieder in das Netzwerk hochladen;
  • Lesezeichen erstellen und speichern;
  • Sie können Links herunterladen, die von anderen Anwendungen gesendet wurden.
  • Es muss einen Knopf geben Startseite, Menü mit verschiedenen Einstellungen usw.

Im Allgemeinen ein vollwertiger Do-it-yourself-Browser. Lassen Sie uns dies in Code umwandeln.

Das Programm basiert auf der in Android enthaltenen Standard-Webansicht. Als Startseite Ich verwende Yandex, das ist Geschmackssache. Die Hauptaktivität wird MainActivity sein.

Zunächst legen wir das Markup fest xml-Datei-activity_main.xml. Wir verwenden LinearLayout als Hauptcontainer – wir packen die ProgressBar darin ein, um den Ladevorgang anzuzeigen. Als nächstes erstellen wir einen weiteren LinearLayout-Container – wir packen unser Webview und FrameLayout darin ein (wir verwenden ihn, um das abgespielte Video auf den Vollbildmodus zu strecken).

Code ansehen

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height= „match_parent“ android:orientation="vertical" tools:context=".MainActivity">

Beginnen wir mit dem Schreiben von Code in MainActivity

Vollständiger Code von MainActivity.

Vollständigen Code anzeigen

java.io.File importieren; android.R.menu importieren; import android.annotation.SuppressLint; importiere android.app.ActionBar; Android.app.Activity importieren; 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; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; android.net.Uri importieren; android.os.Bundle importieren; android.os.Environment importieren; import android.os.Parcelable; import android.os.PowerManager; import android.preference.PreferenceManager; import android.provider.MediaStore; import android.util.Log; import android.view.KeyEvent; android.view.Menu importieren; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.webkit.ConsoleMessage; import android.webkit.DownloadListener; import android.webkit.ValueCallback; import android.webkit.WebBackForwardList; import android.webkit.WebChromeClient; importiere android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.FrameLayout; import android.widget.SearchView; importiere android.widget.Toast; import android.graphics.Bitmap; import android.webkit.URLUtil; öffentliche Klasse MainActivity erweitert Aktivität ( //Boolesche Variable für Verbindungsstatus Boolean isInternetPresent = false; ConnectionDetector cd; private WebChromeClient.CustomViewCallback mFullscreenViewCallback; private FrameLayout mFullScreenContainer; private View mFullScreenView; private WebView mWebView; String urload; int Cache = 1; SharedPreferences sPref ; finale Aktivitätsaktivität = this; öffentlicher Uri imageUri; privater statischer finaler int FILECHOOSER_RESULTCODE = 2888; privater ValueCallback mUploadMessage; privater Uri mCapturedImageURI = null; privater DownloadManager downloadManager; @Override protected void onCreate(Bundle savingInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Eine Beispiel-Verbindungsdetektorklasse erstellen: cd = new ConnectionDetector(getApplicationContext()); // ein Zuhause erstellen button final ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); // die Absicht abfangen, dass die Datei geladen wird, und BroadcastReceiver benachrichtigen Receiver = new BroadcastReceiver() ( @Override public void onReceive(Context context, Intent intent) ( String action = intent.getAction(); if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) ( loadEnd(); ) ) ); // Fange die Absicht ab, dass die Datei heruntergeladen wird registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); mWebView = (WebView) findViewById(R.id.web_view); mFullScreenContainer = (FrameLayout) findViewById(R.id.fullscreen_container); mWebView.setWebChromeClient(mWebChromeClient); mWebView.loadUrl("http: //yandex.ru"); handleIntent(getIntent()); Die Klasse HelloWebViewClient erweitert WebViewClient ( @Override public void onPageStarted(WebView view, String url, Bitmap favicon) ( super.onPageStarted(view, url, favicon); findViewById(R.id.progress1).setVisibility(View.VISIBLE); setTitle( url); urload=mWebView.getUrl(); ConnectingToInternet (); ) @Override public boolean ShouldOverrideUrlLoading(WebView view, String url) ( view.loadUrl(url); // Links zum Markt starten Uri uri = Uri.parse( url ); if (uri.getScheme().equals("market")) ( Intent i = new Intent(android.content.Intent.ACTION_VIEW); i.setData(uri); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity (i); mWebView.canGoBack(); ( mWebView.goBack(); ) ) // E-Mail starten if (uri.getScheme().equals("mailto")) ( Intent i = new Intent(android.content. Intent .ACTION_SEND); i.setType("text/html"); i.putExtra(Intent.EXTRA_SUBJECT, "Betreff eingeben"); i.putExtra(Intent.EXTRA_TEXT, "Text eingeben"); i.putExtra(Intent. EXTRA_EMAIL , new String(url)); startActivity(i); mWebView.canGoBack(); ( mWebView.goBack(); ) ) // Dialer starten if (uri.getScheme().equals("tel")) ( Intent i = new Intent(android.content.Intent.ACTION_DIAL); i.setData(uri ) ; startActivity(i); mWebView.canGoBack(); ( mWebView.goBack(); ) ) // den Speicherort starten if (uri.getScheme().equals("geo")) ( Intent i = new Intent(android .Inhalt. Intent.ACTION_VIEW); i.setData(uri); startActivity(i); mWebView.canGoBack(); ( mWebView.goBack(); ) ) return true; ) @Override public void onPageFinished(WebView view, String url) ( findViewById(R.id.progress1).setVisibility(View.GONE); ) @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) ( ConnectingToInternet (); mWebView.loadUrl("file:///android_asset/error.png"); ) ) mWebView.setWebViewClient(new HelloWebViewClient()); // Dateien auf das Gerät herunterladen mWebView.setDownloadListener(new DownloadListener() ( @Override public void onDownloadStart(final String url, String userAgent, String contentDisposition, String mimetype, long contentLength) ( final String fileName = URLUtil.guessFileName(url, contentDisposition , mimetype); final AlertDialog.Builder downloadDialog = new AlertDialog.Builder(MainActivity.this); downloadDialog.setTitle("Download Manager"); downloadDialog.setMessage("Diese Datei in den Donwload-Ordner herunterladen?" + "n" + mimetype + " n" + url); downloadDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() ( public void onClick(DialogInterface dialogInterface, int i) ( doDownload(url, fileName); dialogInterface.dismiss(); ) )) ; downloadDialog .setNegativeButton("No", new DialogInterface.OnClickListener() ( public void onClick(DialogInterface dialogInterface, int i) ( ) )); downloadDialog.show(); ) )); ) // *********************************************** * //***** ******************************** //**** ******** ***************************** public void ConnectingToInternet ()( //Status von abrufen Internetverbindung isInternetPresent = cd.ConnectingToInternet(); //Überprüfen Sie den Internetstatus: if (isInternetPresent) ( //Es besteht eine Internetverbindung //do HTTP-Anfragen: ) else ( //Keine Internetverbindung Toast.makeText(this, „Das Internet ist ausgefallen!!!“, Toast.LENGTH_SHORT).show(); ) ) @SuppressLint("SetJavaScriptEnabled") @Override // Einstellungen öffentlich void onResume( )( super.onResume(); SharedPreferences sPref = PreferenceManager.getDefaultSharedPreferences(this); if (sPref.getBoolean("img", false)) ( mWebView.getSettings().setLoadsImagesAutomatically(false); ) else ( mWebView .getSettings( ).setLoadsImagesAutomatically(true); ) if (sPref.getBoolean("js", false)) ( mWebView.getSettings().setJavaScriptEnabled(false); ) else ( mWebView.getSettings().setJavaScriptEnabled(true); ) if ( sPref.getBoolean("cache", false)) ( Cache = 2; ) else ( Cache = 1; ) ) // Ein Lesezeichen schreiben public void saveBm(String urlPage1, String urlTitle1) ( Intent intent = new Intent( this, SaveBmActivity. class); intent.putExtra("urlTitle", urlTitle1); intent.putExtra("urlPage", urlPage1); startActivity(intent); ) public void pref() ( // Intent-Einstellungen intent = new Intent( this, PreferencesActivity. class); startActivity(intent); ) // Cache und Verlauf löschen private void clCache())( clearCache(activity); mWebView.clearCache(true); mWebView.clearHistory(); Toast.makeText(this, "Cache and History cleared", Toast.LENGTH_SHORT) .show (); ) @Override protected void onUserLeaveHint() ( super.onUserLeaveHint(); ) @Override public boolean onKeyDown(int keyCode, KeyEvent event) (// back button if ((keyCode == KeyEvent.KEYCODE_BACK)) ( mWebView. canGoBack(); ( mWebView.goBack(); ) return true; ) return super.onKeyDown(keyCode, event); ) // URL des laufenden Programms abfangen private boolean handleIntent(Intent intent) ( String action = intent .getAction(); if (Intent.ACTION_VIEW.equals(action)) ( String url = intent.getDataString(); Toast.makeText(this, url, Toast.LENGTH_SHORT).show(); mWebView.loadUrl(url); // Seite laden return true; ) return false; ) // download manager private void doDownload(String url,String fileName) ( Uri uriOriginal = Uri.parse(url); try ( Toast.makeText(MainActivity.this, "Downloading " + Dateiname, Toast. LENGTH_LONG).show(); Anfrage anfordern= new DownloadManager.Request(Uri.parse(url)); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); final DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); dm.enqueue(request); ) Catch (Exception e) ( Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show(); Log.e("", "Problem downloading: " + uriOriginal, e); ) ) // pull the Video Vollbild privat final WebChromeClient mWebChromeClient = new WebChromeClient() ( @Override @SuppressWarnings("deprecation") public void onShowCustomView(View view, int requestOrientation, CustomViewCallback callback) ( onShowCustomView(view, callback); ) @Override public void onShowCustomView( Ansicht anzeigen, CustomViewCallback-Rückruf) ( if (mFullScreenView != null) ( callback.onCustomViewHidden(); return; ) mFullScreenView = view; mWebView.setVisibility(View.GONE); mFullScreenContainer.setVisibility(View.VISIBLE); mFullScreenContainer.addView( view); mFullscreenViewCallback = Rückruf; ) @Override public void onHideCustomView() ( super.onHideCustomView(); if (mFullScreenView == null) ( return; ) mWebView.setVisibility(View.VISIBLE); mFullScreenView.setVisibility(View.GONE) ; mFullScreenContainer.setVisibility(View.GONE); mFullScreenContainer.removeView(mFullScreenView); mFullscreenViewCallback.onCustomViewHidden(); mFullScreenView = null; ) // *********************************************** ******** Hochladen von Dateien in das Netzwerk // openFileChooser für Android 3.0+ public void openFileChooser(ValueCallback uploadMsg, String AcceptType) ( // Nachricht aktualisieren mUploadMessage = uploadMsg; try ( // AndroidExampleFolder in SD-Kartendatei erstellen imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) , "AndroidExampleFolder"); if (!imageStorageDir.exists( ) ) ( // AndroidExampleFolder in SD-Karte erstellen imageStorageDir.mkdirs(); ) // Pfad und Namen der von der Kamera erfassten Bilddatei erstellen Dateidatei= new File(imageStorageDir + File.separator + „IMG_“ + String.valueOf(System.currentTimeMillis()) + „.jpg“); mCapturedImageURI = Uri.fromFile(file); // Bildaufnahmekamera-Intent final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); Absicht i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); // Eine Intent-Selektordatei erstellen Intent ChooserIntent = Intent.createChooser(i, "Image Chooser"); // Kameraabsicht festlegen, um Dateien auszuwählen ChooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS , new Parcelable(captureIntent)); // Um ​​ein Bild auszuwählen, umgehen Sie die Methode onactivityresult, rufen Sie die Aktivitätsmethode auf startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE); ) Catch (Exception e) ( Toast.makeText(getBaseContext(), "Exception:" + e, Toast.LENGTH_LONG).show(); ) ) // openFileChooser für Android< 3.0 @SuppressWarnings("unused") public void openFileChooser(ValueCallbackuploadMsg) ( openFileChooser(uploadMsg, ""); ) // @SuppressWarnings("unused") public void openFileChooser(ValueCallback uploadMsg, String AcceptType, String Capture) ( openFileChooser(uploadMsg, AcceptType); ) public boolean onConsoleMessage(ConsoleMessage cm) ( onConsoleMessage(cm.message(), cm.lineNumber(), cm.sourceId()); return true; ) public void onConsoleMessage(String message, int lineNumber, String sourceID) ( //Log.d("androidruntime", "Konsolenmeldungen anzeigen, zum Debuggen verwendet: " + message); ); );// setWebChromeClient beenden // Ergebnis abrufen @SuppressWarnings("unused") private Object data; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) ( if (data == null) ( return; ) String urlPage2 = data.getStringExtra("urlPage2"); mWebView.loadUrl(urlPage2); if (requestCode = = FILECHOOSER_RESULTCODE) ( if (null == this.mUploadMessage) ( return; ) Uri result = null; try ( if (resultCode != RESULT_OK) ( result = null; ) else ( // Aus eigener Variable abrufen, wenn Intent null Ergebnis ist = data == null ? mCapturedImageURI: data.getData(); ) ) Catch (Exception e) ( Toast.makeText(getApplicationContext(), "activity:" + e, Toast.LENGTH_LONG).show(); ) mUploadMessage .onReceiveValue (Ergebnis); mUploadMessage = null; ) ) //************************************** public void loadEnd () ( Toast .makeText(this, "File Uploaded to Donwload", Toast.LENGTH_SHORT).show(); ) // menu @Override public boolean onCreateOptionsMenu(Menu menu) ( // Das Menü aufblasen; dies fügt hinzu Elemente zur Aktionsleiste hinzufügen, falls vorhanden.getMenuInflater().inflate(R.menu.main, menu); return true; ) // *********************************************** ******** @Override public boolean onOptionsItemSelected(MenuItem item) ( switch (item.getItemId()) ( case android.R.id.home:// Home "Button mWebView.loadUrl("http://yandex.ru"); return true; case R.id.item1:// zurück mWebView.canGoBack(); ( mWebView.goBack(); ) return true; case R.id.item2: // weiterleiten mWebView.canGoForward(); ( mWebView.goForward(); ) return true; case R.id.item3: // mWebView.reload() neu laden; ( mWebView.reload(); ) return true; case R.id.item4:// Cache leeren mWebView.clearCache(true); clearCache(aktivität); Toast.makeText(this, "Cache clear.", Toast.LENGTH_SHORT).show(); return true; case R.id.item5: mWebView.clearHistory();// Verlauf löschen Toast.makeText(this, „Verlauf ist gelöscht.“, Toast.LENGTH_SHORT).show(); return true; case R.id.item6: saveBm(mWebView.getUrl(), mWebView.getTitle());// schreibe ein Lesezeichen return true; case R.id.item7:// bookmark bar Intent intent1 = new Intent(this, SaveBmActivity.class); startActivityForResult(intent1, 1); return true; case R.id.item8: // Laden stoppen mWebView.stopLoading(); return true; case R.id.item9: pref();// Settings return true; case R.id.item10: // vorerst leer return true; case R.id.item11:// exit if (cache == 2) ( clCache(); ) finish(); return true; Standard: return super.onOptionsItemSelected(item); ) ) @SuppressWarnings("deprecation") @Override public void onDestroy() ( super.onDestroy(); mWebView.stopLoading(); mWebView.clearCache(true); mWebView.clearView(); mWebView.freeMemory(); mWebView. destroy(); mWebView = null; ) // Cache leeren void clearCache(Context context) ( clearCacheFolder(context.getCacheDir()); ) void clearCacheFolder(final File dir) ( if (dir!= null && dir.isDirectory( ) ) ( try ( for (File child:dir.listFiles()) ( //rekursiv zuerst die Verzeichnisse löschen if (child.isDirectory()) clearCacheFolder(child); else //dann die tatsächlichen Dateien child.delete(); ) ) Catch (Ausnahme e) ( ) ) ) )

Das Projekt kann heruntergeladen werden

Mit Android können Sie Ihr eigenes Fenster zum Anzeigen von Webseiten erstellen oder mithilfe des Elements sogar Ihren eigenen Klon des Browsers erstellen. Das Element selbst verwendet die WebKit-Engine und verfügt über viele Eigenschaften und Methoden. Wir beschränken uns auf ein einfaches Beispiel für die Erstellung einer Anwendung, mit der wir Seiten im Internet anzeigen können. IN letzte Version Es kommt die Engine von Chromium zum Einsatz, bei einfachen Aufgaben gibt es hier allerdings keinen großen Unterschied.

Lassen Sie uns ein neues Projekt erstellen MeinBrowser und ersetzen Sie sofort den Code in der Markup-Datei res/layout/activity_main.xml:

Öffnen wir nun die Aktivitätsdatei MainActivity.java und deklarieren Sie die Komponente und initialisieren Sie sie auch – aktivieren Sie die JavaScript-Unterstützung und geben Sie die zu ladende Seite an.

Private WebView webView; public void onCreate(Bundle savingInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = findViewById(R.id.webView); // JavaScript-Unterstützung aktivieren webView.getSettings().setJavaScriptEnabled(true) ; // Geben Sie die Download-Seite an webView.loadUrl("http://site/android"); )

Da die Anwendung das Internet nutzt, müssen Sie in der Manifestdatei die Internetzugriffsberechtigung festlegen.

Dort im Manifest ändern wir die Zeile für den Bildschirm, indem wir den Titel aus unserer Anwendung entfernen (in Fettschrift):

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

Starten wir die Anwendung. Wir verfügen nun über einen einfachen Webseiten-Viewer, allerdings mit einem Nachteil. Wenn Sie auf einen Link klicken, wird Ihr Standardbrowser automatisch gestartet und die neue Seite wird dort angezeigt. Genauer gesagt war es schon einmal so. Auf neuen Geräten wird beim Starten der Anwendung sofort der Browser geöffnet.

Um dieses Problem zu lösen und Links in Ihrem Programm zu öffnen, müssen Sie die Klasse überschreiben WebViewClient und lassen Sie unsere Anwendung die Links verwalten. Fügen wir dem Code eine verschachtelte Klasse hinzu:

Die private Klasse MyWebViewClient erweitert WebViewClient ( @TargetApi(Build.VERSION_CODES.N) @Override public boolean ShouldOverrideUrlLoading(WebView view, WebResourceRequest request) ( view.loadUrl(request.getUrl().toString()); return true; ) // For alte Geräte @Override public boolean ShouldOverrideUrlLoading(WebView view, String url) ( view.loadUrl(url); return true; ) )

Dann in der Methode onCreate() Definieren wir eine Instanz MyWebViewClient. Es kann sich nach der Initialisierung des Objekts an einer beliebigen Stelle befinden:

WebView.setWebViewClient(new MyWebViewClient());

Jetzt in unserer Anwendung erstellt WebViewClient, wodurch jede in ausgewählte angegebene URL in den Container selbst geladen werden kann, anstatt den Browser starten zu müssen. Für diese Funktionalität ist die Methode verantwortlich, in der wir die aktuelle und gewünschte URL angeben. Rückgabewert WAHR bedeutet, dass wir keinen Browser eines Drittanbieters starten müssen, sondern den Inhalt selbstständig über den Link herunterladen. In der Version API 24 wurde eine überladene Version der Methode hinzugefügt, bitte berücksichtigen Sie dies.

Starten Sie das Programm neu und stellen Sie sicher, dass die Links jetzt in die Anwendung selbst geladen werden. Doch nun ist ein weiteres Problem aufgetaucht. Wir können nicht zur vorherigen Seite zurückkehren. Wenn wir auf unserem Gerät die ZURÜCK-Taste drücken, schließen wir einfach unsere Anwendung. Um das neue Problem zu lösen, müssen wir mit dem Drücken der ZURÜCK-Taste umgehen. Fügen Sie eine neue Methode hinzu:

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

Wir müssen prüfen, was die Navigation zur vorherigen Seite unterstützt. Wenn die Bedingung wahr ist, wird die Methode aufgerufen geh zurück(), was uns einen Schritt zurück zur vorherigen Seite führt. Wenn es mehrere solcher Seiten gibt, können wir nacheinander zur allerersten Seite zurückkehren. In diesem Fall gibt die Methode immer den Wert zurück WAHR. Wenn wir zur allerersten Seite zurückkehren, von der aus wir unsere Reise im Internet begonnen haben, kehrt der Wert zurück FALSCH und das Drücken der ZURÜCK-Taste wird vom System selbst verarbeitet, wodurch der Anwendungsbildschirm geschlossen wird.

Starten Sie die Anwendung erneut. Sie verfügen nun über Ihren eigenen Webbrowser, mit dem Sie Links folgen und zur vorherigen Seite zurückkehren können. Nachdem Sie die Dokumentation studiert haben, können Sie die Anwendung mit weiteren leckeren Extras für Ihren Browser ausstatten.

Wenn Sie möchten, dass einige der Links, die zu Ihrer Website führen, im Browser und lokale Links in der Anwendung geöffnet werden, verwenden Sie eine Bedingung mit unterschiedlichen Rückgabewerten.

Die öffentliche Klasse MyWebViewClient erweitert WebViewClient ( @Override public boolean ShouldOverrideUrlLoading(WebView view, String url) ( if(Uri.parse(url).getHost()..ACTION_VIEW, Uri.parse(url)); view.getContext().startActivity (Absicht); true zurückgeben; ) )

Eine universelle Methode, die alle lokalen Links in der Anwendung öffnet, den Rest im Browser (wir ändern eine Zeile):

Die öffentliche Klasse MyAppWebViewClient erweitert WebViewClient ( @Override public boolean ShouldOverrideUrlLoading(WebView view, 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); return true; ) )

Lassen Sie uns das Beispiel nun etwas komplizieren, damit der Benutzer eine Alternative zu Standardbrowsern hat.

Um es klarer zu machen, ordnen wir das Beispiel wie folgt um. Erstellen Sie zwei Aktivitäten. Platzieren Sie in der ersten Aktivität eine Schaltfläche, um zur zweiten Aktivität zu gelangen, und platzieren Sie in der zweiten Aktivität eine Komponente.

Im Manifest legen wir einen Filter für die zweite Aktivität fest.

Code für die Schaltfläche, um zur zweiten Aktivität zu gelangen.

Public void onClick(View view) ( Intent intent = new Intent("ru.alexanderklimov.Browser"); intent.setData(Uri.parse("http://site/android/")); startActivity(intent); )

Wir haben unsere eigene Absicht mit einem Filter erstellt und Daten bereitgestellt – die Website-Adresse.

Die zweite Aktivität sollte Daten erhalten:

Paket ru.alexanderklimov.testapplication; android.net.Uri importieren; import android.support.v7.app.AppCompatActivity; android.os.Bundle importieren; importiere android.webkit.WebView; import android.webkit.WebViewClient; öffentliche Klasse SecondActivity erweitert AppCompatActivity ( @Override protected void onCreate(Bundle savingInstanceState) ( 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()); ) private Klasse Callback erweitert WebViewClient ( @Override public boolean ShouldOverrideUrlLoading (WebView view, String url) ( return(false); ) ) )

Im Filter für die zweite Aktivität haben wir zwei Aktionen angegeben.

Das bedeutet, dass jede Aktivität (sprich: Anwendung) Ihre Mini-Browser-Aktivität auf die gleiche Weise auslösen kann. Starten Sie ein beliebiges altes Projekt im Studio in einem separaten Fenster oder erstellen Sie ein neues, fügen Sie eine Schaltfläche hinzu und schreiben Sie denselben Code, mit dem wir auf die Schaltfläche geklickt haben.

Starten Sie die zweite Anwendung (die erste Anwendung kann geschlossen werden) und klicken Sie auf die Schaltfläche. Die erste Anwendung starten Sie nicht über den Startbildschirm, sondern gleich die zweite Aktivität über einen Minibrowser. Auf diese Weise kann jede Anwendung einen Browser starten, ohne den Klassennamen Ihrer Aktivität zu kennen, sondern nur die Zeichenfolge zu verwenden „ru.alexanderklimov.Browser“, übermittelt an Absicht. In diesem Fall sollte Ihre Browseraktivität eine Standardkategorie und -daten haben. Lass mich dich errinnern:

Sie können Ihren String als String-Konstante darstellen und allen potenziellen Benutzern Ihres Browsers mitteilen, wie sie ihn selbst ausführen können. Aber Android verfügt bereits über eine solche vorgefertigte Konstante ACTION_VIEW, was laut Dokumentation wie folgt lautet:

Öffentlicher statischer finaler java.lang.String ACTION_VIEW = "android.intent.action.VIEW";

Schreiben wir den Code für die Schaltfläche in der zweiten Anwendung neu

Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://site/android/")); startActivity(intent);

Was wird dieses Mal passieren? Wir erinnern uns, dass uns zwei Maßnahmen vorgeschrieben sind, darunter android.intent.action.VIEW. Das bedeutet, dass unsere erste Anwendung mit einem Browser diesen Befehl auch erkennen muss, wenn eine Benutzeranwendung diesen Code verwendet. Der Emulator verfügt über mindestens ein solches „Browser“-Programm, und nun wurde ihm unsere zweite Aktivität aus der ersten Anwendung hinzugefügt. Auf dem Bildschirm werden zwei Anwendungen zur Auswahl angezeigt.

Und wenn Sie alle alternativen Browser löschen und nur Ihr Programm übrig lassen, haben Sie keine andere Wahl. Ihr Browser wird zum Hauptbrowser. Und wenn eine Anwendung eine Webseite auf die angegebene Weise starten möchte, wird Ihr Programm geöffnet.

Eine kleine Anmerkung. Wenn Sie die letzte Zeile durch Folgendes ersetzen:

StartActivity(Intent.createChooser(intent, "Meow..."));

Dann erscheint im Programmauswahlfenster anstelle der obersten Zeile „Öffnen mit“ oder deren lokaler Übersetzung Ihre Zeile. Aber das ist nicht die Hauptsache. Wenn aus irgendeinem Grund kein einziger Browser auf dem Gerät vorhanden ist, führt diese Version des Codes im Gegensatz zur Originalversion nicht zum Absturz der Anwendung. Nutzen Sie daher aus Gründen der Zuverlässigkeit die vorgeschlagene Option.

Lassen Sie uns eine neue Anwendung erstellen - einen Browser für Android-Geräte. Mit unseren eigenen Händen wird es interessant sein und es wird nicht viel Code geben.

Browser-App für Android

Lassen Sie uns Android Studio starten und ein neues Projekt erstellen. Der Anwendungsname lautet „Meine Website“ und die Unternehmensdomäne liegt in unserem Ermessen. Ich habe die Website-Domäne „Site“ eingegeben. Klicken Sie auf Weiter, auf der nächsten Registerkarte lassen wir alles unverändert, klicken Sie auf Weiter, dann ist die nächste bereits ausgewählt Leere Aktivität, wir belassen es, ändern dann auf der letzten Registerkarte den Layoutnamen von „activity_main“ in „main“ und klicken auf „Fertig stellen“.

Android Studio Ich werde die Projektdateien vorbereiten, dies wird einige Zeit in Anspruch nehmen. Im Hauptfenster werden zwei Dateien geöffnet. main.xml Und MainActivity.java Beginnen wir mit der Arbeit an Letzterem. Lassen Sie uns die erweiterte AppCompactActivity in Activity ändern und speichern.

Hinzufügen von Berechtigungen zum Manifest

Öffnen Sie dann die Datei AndroidManifest.xml und fügen Sie nach dem ersten Abschnitt eine benutzerdefinierte Berechtigung hinzu Benutzerberechtigung,

damit unsere Anwendung Zugriff auf das Internet hat. Speichern und schließen wir AndroidManifest.xml.

Gehen wir zur Datei Main.xml, es befindet sich im Pfad res/layout/main.xml, löschen Sie die Zeile android:text="Hello Word!" Ändern Sie TextView vollständig in WebView und entfernen Sie unnötige Auffüllungen (paddingBottom, paddingLeft, paddingRight, paddingTop) aus den Eigenschaften der Hauptebene RelativeLayout.

Fügen Sie für WebView die Eigenschaft android:id="@+id/webView" hinzu, ändern Sie android:layout_width="wrap_content" und android:layout_height="wrap_content" in android:layout_width="match_parent" und android:layout_height="match_parent" , damit unser WebView-Element den gesamten Bildschirm ausfüllt.

Codelogik in Java

Wir sind mit der Datei main.xml fertig, fahren wir fort MainActivity.java. Fügen wir eine Variable hinzu wv Typ WebView, wir werden ihm ein Element zuweisen, es mit der Funktion findViewById() finden, die WV-Einstellungen beschreiben, insbesondere zulassen, dass WebView Java-Skripte ausführt, die Adresse zum Laden der Site in unseren Browser angeben, zum Beispiel, Ich starte Yandex mit der Funktion loadUrl("http://ya.ru").

öffentliche Klasse MainActivity erweitert Aktivität ( WebView wv; @Override protected void onCreate(Bundle savingInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.main); wv = (WebView)findViewById(R.id.webView); WebSettings Settings = wv.getSettings(); Settings.setJavaScriptEnabled(true); wv..setWebViewClient(new WebViewClient()); )

Nachfolgend beschreiben wir auch den Vorgang des Drückens der Zurück-Taste am Gerät.

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

Ausführen einer Anwendung in einem Emulator

Klicken Sie auf die Schaltfläche „Start“. Es handelt sich um ein grünes Dreieck in der Symbolleiste AndroidStudio, unser Emulator startet, und wenn alles richtig gemacht ist, startet nach einer Weile die Yandex-Suche im Browser, Sie können auf die virtuelle Tastatur klicken und nach etwas suchen, alles funktioniert gut.

Schließen wir das Programm, ohne den Emulator selbst zu schließen, indem wir auf das rote Rechteck klicken. Dies ist Stopp statt Start. Ändern Sie die Adresse in eine beliebige. Ich werde meine Site mit „https://site“ „bewerben“.

Ich klicke auf „Speichern“ und führe das Programm erneut aus. Diesmal geht alles schneller. Ich stöbere auf der Website herum. Im Abschnitt „Programmierung für Android“ finden Sie Artikel und Videos zum Installieren und Konfigurieren von AndroidStudio, zum Erstellen eines Android-Emulators usw einfache Beispiele für Programme.

Vollständiger Text von AndroidManifest.xml

Vollständiger Text von main.xml

Vollständiger Text von MainActivity.java

Paket ru.maxfad.mysite; Android.app.Activity importieren; android.os.Bundle importieren; import android.webkit.WebSettings; importiere android.webkit.WebView; import android.webkit.WebViewClient; öffentliche Klasse MainActivity erweitert Aktivität ( WebView wv; @Override protected void onCreate(Bundle savingInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.main); wv = (WebView)findViewById(R.id.webView); WebSettings Settings = wv.getSettings(); Settings.setJavaScriptEnabled(true); wv..setWebViewClient(new WebViewClient()); ) @Override public void onBackPressed())( if(wv.canGoBack())( wv.goBack() ; )else( super.onBackPressed(); ) ) )

Dieses Video zeigt im Detail, wie man eine Browseranwendung für Android-Geräte erstellt:

Wir haben bereits damit begonnen, uns vollständig mit persönlicher Software auszustatten; erinnern Sie sich an unseren wunderbaren Taschenrechner und Konverter. Und in dieser Lektion lernen wir, wie man einen einfachen Browser erstellt, mit dem man im Internet surfen kann. Stimmen Sie zu, das Surfen im Internet mit Ihrem eigenen Browser ist um ein Vielfaches angenehmer als mit Opera oder Chrome (kaum bequemer, aber angenehmer :)). Wir erstellen ein neues Projekt, die Namen wählen wir traditionell selbst aus. Persönlich erstelle ich nicht jedes Mal alles von Grund auf, sondern öffne einfach das, was ich habe, und bereinige den gesamten Code bis Ausgangszustand Leere Aktivität. Tun Sie, was für Sie am bequemsten ist.

Lassen Sie uns daher kurz den Umfang und die Besonderheiten der weiteren Arbeit skizzieren. Wir müssen ein Element erstellen , in dem alles passieren wird, schreiben Sie den Code, der unseren persönlichen Webbrowser erstellt, und ordnen Sie ihn an Basisfunktionen, registrieren Sie die Berechtigung für unsere Anwendung, das Internet in der Manifestdatei zu nutzen, und schreiben Sie einen Hardware-Button-Klick-Handler "Zurück" auf dem Gerät (das heißt, was in unserem Browser passiert, wenn wir auf diese Schaltfläche klicken).

Lass uns anfangen. Öffne die Datei Aktivität_main.xml. Wir erstellen dort ein einzelnes Element , was für uns völlig ausreicht, um einen Webbrowser zu implementieren:

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

Das Layoutfenster sieht folgendermaßen aus:

Danach kümmern wir uns sofort um die Datei AndroidManifest.xml. Öffnen Sie es und fügen Sie dort zwei Zeilen hinzu. Eine davon ist die Erlaubnis für die Anwendung, das Internet zu nutzen, die andere ist die Änderung des Stils der Anwendung bzw. das Ausblenden des „Titel“-Bereichs der Anwendung (der Bereich mit dem Anwendungstitel) der Reihe nach um dem Browserfenster mehr Platz zum Anzeigen von Seiten zu bieten.

Wir schreiben eine Zeile für die Erlaubnis zur Nutzung des Internets Voröffnendes Tag ...:

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

Fügen wir nun die Einstellungszeile unseres hinzu Aktivität Befehl zum Ausblenden der Kopfzeile (untere Zeile in Fettdruck, dies ist auch in AndroidManifest.xml):

< activity android: name= ".MainActivity" android: label= android: theme= „@android:style/Theme.NoTitleBar“ >

Kommen wir nun zum wichtigsten und verantwortungsvollsten Teil der Arbeit – dem Schreiben von Java-Code. Öffnen Sie die Datei MainActivity.java und schreiben Sie Folgendes (Erklärungen finden Sie im Code nach den //-Zeichen, für diejenigen, die es nicht bemerkt haben):

Paket home.myapplication ; Android.app.Activity importieren; import android.app.AlertDialog ; importiere android.content.ContentValues ​​​​; android.content.Intent importieren; importiere android.database.Cursor ; importieren android.database.sqlite.SQLiteDatabase; importieren android.database.sqlite.SQLiteOpenHelper; importieren android.support.v7.app.ActionBarActivity; android.os.Bundle importieren; android.util.Log importieren; importiere android.view.KeyEvent ; Android.view.Menu importieren; import android.view.MenuItem ; Android.view.View importieren; importiere android.webkit.WebView ; import android.webkit.WebViewClient ; Android.widget.Button importieren; import android.widget.EditText ; importiere android.widget.RadioButton ; import android.widget.TextView ; Die öffentliche Klasse MainActivity erweitert die Aktivität ( // Deklarieren Sie eine Variable vom Typ WebView privates WebView mWeb; // Erstellen Sie eine Klasse vom Typ Webbrowser (WebViewClient), die wir konfigurieren // standardmäßige Berechtigung zum Verarbeiten aller Links innerhalb dieser Klasse, // ohne Zugriff Programme von Drittanbietern: private Klasse WebViewer erweitert WebViewClient ( (WebView view , String url ) ( view. loadUrl(url); return true ; ) ) public void onCreate (Bundle savingInstanceState ) ( super. onCreate(savedInstanceState); setContentView(R . layout.activity_main); // Binden Sie die deklarierte WebView-Typvariable an die von uns erstellte Variable // zum WebView-Element in der Dateiactivity_main.xml: mWeb= (WebView )findViewById(R . id. web); // Wir aktivieren die Unterstützung für Java-Skripte für dieses Element: mWeb. getSettings(). setJavaScriptEnabled(true); // Richten Sie eine Seite ein, die beim Start geladen wird. Sie können Folgendes eingeben: mWeb. LoadUrl( „http://developeroleg.ucoz.ru/“); // Richten Sie einen Browser für unser WebView-Element ein und verbinden Sie den Browser, den wir oben erstellt haben // Webclient, mit dem Seiten angezeigt werden: mWeb. setWebViewClient(new WebViewer()); ) // Wir schreiben Code zur Verarbeitung des Klicks auf die Zurück-Taste auf dem Gerät, der es uns ermöglicht, zu drücken // Verwenden Sie die Schaltfläche „Zurück“, um zur vorherigen Seite zu gelangen, anstatt nur Anwendungen zu schließen. // Es wird nur dann mit dem „Zurück“-Button geschlossen, wenn wir uns auf der Startseite befinden // die oben angegebene Seite:@Override public void onBackPressed() ( if (mWeb. canGoBack()) ( mWeb. goBack();) else ( super. onBackPressed(); ) ) )

Das ist alles! Tatsächlich ist alles ganz einfach und nach einiger Arbeit haben wir unseren eigenen Browser, natürlich ist er ganz einfach und hat keine Optionen, aber das reicht völlig aus, um das Wesentliche bei der Erstellung solcher Anwendungen zu verstehen.

Standardbrowser auf Android-Geräten werden den alltäglichen Bedürfnissen anspruchsvoller Nutzer oft nicht gerecht. In diesem Betriebssystem Es gibt viele hochwertige und funktionale Internetbrowser. Wir haben gesammelt beste Browser für Android in diesem Artikel.

Firefox trägt zu Recht den Titel eines der besten mobilen Browser für Android. Im Laufe der Jahre der Präsenz auf diesem Betriebssystem hat die Entwicklung von Mozilla viele Funktionen erworben und eine verbesserte moderne Benutzeroberfläche erhalten. Firefox für Android bietet ein ausgewogenes Verhältnis von Funktionalität, Komfort und Benutzergeschwindigkeit. Der mobile Browser von Mozilla ist diesem in der Geschwindigkeit unterlegen Google Chrome, aber viele Funktionen von Firefox wurden viel angenehmer und komfortabler gestaltet.

Die Firefox-eigene Gecko-Engine unterstützt fast alle modernen Webstandards und es gibt auch Erweiterungen dafür mit zusätzlichen Funktionen, genau wie in der Desktop-Version des Browsers. Zu den Hauptfunktionen von Fiefox gehören: Synchronisierung aller Daten zwischen Browsern über ein spezielles Konto, sicheres Surfen, komfortables Startpanel, viele Erweiterungen, Lesemodus.



Der beliebteste Browser nicht nur auf Computern, sondern auch auf mobile Geräte Ah, ist Google Chrome. Kein Wunder, da es auf den beliebtesten mobilen Betriebssystemen fast immer vorinstalliert ist. Chrome hat zu Recht an Popularität gewonnen – es ist schnell, relativ funktional, einfach und bequem und lässt sich auch gut integrieren Google-Dienste und die Desktop-Version des Browsers (es gibt eine vollständige Synchronisierung von Daten und Registerkarten). Die Integration mit Google-Diensten kann manchmal nützlich sein, zum Beispiel das Übersetzen von Text auf Seiten mit mit GoogleÜbersetzer oder Sprachsuche.

Chrome kümmert sich auch um die Sicherheit der Benutzer – der Browser verfügt über einen integrierten Filter für Websites, die für Android-Geräte gefährlich sein könnten. Es gibt eine Art Datenkomprimierungstechnologie. Es ist nicht so perfekt wie das von Opera, speichert aber dennoch viele Daten, die sowohl über WLAN als auch über das mobile Internet übertragen werden. Es gibt einen Inkognito-Modus für den anonymen Besuch von Websites. Vielleicht der einzige Nachteil von Chrome dieser Moment- Mangel an Erweiterungsunterstützung. Für diejenigen, die zuerst alle neuen Funktionen ausprobieren möchten, gibt es Chrome Beta und Dev. Diese Browserversionen werden schneller und häufiger aktualisiert – alle Neuerungen werden darin getestet.



Mobile Browser des norwegischen Unternehmens Opera gehören ebenfalls zu den beliebtesten, funktionalsten und am schnellsten wachsenden auf dem Markt. Android-Plattform. Im Laufe der vielen Jahre ihrer Arbeit ist es diesen Jungs definitiv gelungen, eine Formel für einen nahezu perfekten Internetbrowser für Smartphones und Tablets zu entwickeln. Opera hat fast alles, was Sie brauchen für den durchschnittlichen Benutzer: schnelles Surfen, praktisches klassisches Express-Panel, Datensynchronisierung mit der Desktop-Version, anonymer Modus, bequeme Suche mit Hinweisen aus dem Adressfeld und eine der Hauptfunktionen ist die Verkehrskomprimierung.

Die Jungs von Opera haben ihr Bestes mit verkehrssparenden Technologien gegeben. Mobile Opera mit aktiviertem Turbo-Modus kann die Kosten für mobiles Internet um das Zwei- oder sogar Dreifache senken. Für diejenigen, denen der Verkehrsverbrauch besonders wichtig ist, gibt es Opera Mini – darin ist das Speichern standardmäßig aktiviert, aber manchmal leidet es darunter Aussehen Websites. Außerdem ist die Mini-Version viel leichter und schneller als die normale Opera. Eine weitere Stärke des gleichnamigen Browsers ist sein schönes und angenehmes Erscheinungsbild. Opera war schon immer dafür bekannt, eine der elegantesten Browseroberflächen zu haben. Wenn Sie den gesamten Datenverkehr auf Ihrem Gerät komprimieren möchten, achten Sie auf die Anwendung.



Dolphin ist ein alternativer Browser für Android mit vielen zusätzlichen Funktionen und sofort einsatzbereiten Funktionen. Unter diesen ist die Unterstützung für Adobe Flash hervorzuheben, die fast jeder aufgegeben hat, aber immer noch an vielen Stellen verwendet wird, die Verwendung verschiedener Themen zum Ändern der Benutzeroberfläche, die Unterstützung einzigartiger Add-Ons und die Steuerung praktischer und einfacher Gesten . Das alles ist sofort verfügbar – nein zusätzliche Einstellungen. Dolphin ist außerdem schnell, sicher, kostenlos und immer aktuell – die Entwickler veröffentlichen fast jede Woche Browser-Updates.


Puffin ist ein mobiler Webbrowser, dessen Konzept dem Dolphin ähnelt. Auch hier gibt es eine schöne und komfortable Oberfläche, es gibt viele Möglichkeiten und Puffin ist so schnell wie der „Delphin“. Grundsätzlich ist der Puffin-Browser für schwache Geräte geeignet, da er eine spezielle Technologie für „leichtes“ Websurfen bereitstellt – Seiten werden zunächst geladen Cloud-Dienst Puffin, sie werden dort optimiert und erscheinen in heller Form auf dem Gerätebildschirm. Gleichzeitig werden Qualität und Aussehen der Seiten praktisch nicht durch fehlerhaftes Layout oder verminderte Qualität beeinträchtigt.

Erwähnenswert sind bei Puffin auch eine Reihe zusätzlicher Funktionen:

  • volle Adobe Flash-Unterstützung für Spiele (virtueller Joystick auf dem Bildschirm);
  • Verkehrsverschlüsselung über Cloud-Service;
  • Mausemulation;
  • die Möglichkeit, Dateien zuerst in die Cloud und dann auf das Gerät hochzuladen;
  • Erweiterungen installieren;
  • Schnittstellenthemen.
Der Puffin-Browser ist eine ausgezeichnete Wahl für schwache Geräte, die Funktionalität dieses Internetbrowsers ist jedoch nicht eingeschränkt.



Dem russischen Unternehmen Yandex ist es gelungen, einen eigenen Browser für Android-Mobilgeräte zu entwickeln. Yandex.Browser für diese Plattform ist eine hervorragende Lösung für Benutzer aus der GUS. Dieser Internetbrowser ist vollständig mit den Diensten von Yandex selbst und anderen lokalen Diensten integriert soziale Netzwerke/ Portale. Beispielsweise schlägt die Suchleiste im Browser die benötigten Seiten vor und versteht Anfragen perfekt, und innerhalb der Anwendung können Sie auch Informationen über das Wetter und Staus anzeigen.



Freunden erzählen