Error bei tel: net :: ERR_UNKNOWN_URL_SCHEME

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Error bei tel: net :: ERR_UNKNOWN_URL_SCHEME

    Hallo!
    Habe mit Android Studio einen kleine APP mit webview erstellt die eine Webseite laden soll. Das ganze funktioniert gut. Das einzige Problem das ich habe ist, dass innerhalb der Webseite div. Einträge gelistet sind die auf eine Telefonnummer hinweisen. Es handelt sich dabei um einen Button. Wenn man da drauf klickt sollte die jeweilige Person angerufen werden. Außerhalb der APP im Browser (IOS als auch Android) läuft es fehlerfrei. Beim klicken des Buttons erhalte ich die Möglichkeit die angeführte Tel. anzurufen.

    Wenn ich in der APP drauf klicke bekomme ich folgende Fehlermeldung:
    Webseite nicht verfügbar
    Die Webseite unter tel:0xxxxxxxxx konte nicht geladen weil:

    net::ERR_UNKNOWN_URL_SCHEME

    So sieht mein MainActivity.java File aus:


    Quellcode

    1. package name.work;
    2. import android.app.Activity;
    3. import android.content.Intent;
    4. import android.net.Uri;
    5. import android.os.Bundle;
    6. import android.view.KeyEvent;
    7. import android.webkit.WebSettings;
    8. import android.webkit.WebView;
    9. import android.webkit.WebViewClient;
    10. import name.work.R;
    11. public class MainActivity extends Activity {
    12. WebView myWebView;
    13. @Override
    14. protected void onCreate(Bundle savedInstanceState) {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.activity_main);
    17. myWebView = (WebView) findViewById(R.id.myWebView);
    18. myWebView.loadUrl("https://www.mydomain.work");
    19. myWebView.setWebViewClient(new WebViewClient() {
    20. public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
    21. viewx.loadUrl(urlx);
    22. return false;
    23. }
    24. });
    25. WebSettings webSettings = myWebView.getSettings();
    26. webSettings.setJavaScriptEnabled(true);
    27. }
    28. @Override
    29. public boolean onKeyDown(int keyCode, KeyEvent event) {
    30. if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
    31. myWebView.goBack(); // Go to previous page
    32. return true;
    33. }
    34. // Use this as else part
    35. return super.onKeyDown(keyCode, event);
    36. }
    37. }
    Alles anzeigen

    Ich habe ein wenig im Internet recherchiert und den Code um folgende Zeilen erweitert:


    Quellcode

    1. public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
    2. if (urlx.startsWith("tel:")) {
    3. Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(urlx));
    4. startActivity(intent);
    5. return true;
    6. }
    7. viewx.loadUrl(urlx);
    8. return true;
    9. }


    Leider ohne Erfolg. Ich bekomme nach wie vor die Fehlermeldung:
    Webseite nicht verfügbar
    Die Webseite unter tel:0xxxxxxxxx konte nicht geladen weil:

    net::ERR_UNKNOWN_URL_SCHEME

    Würde mich sehr freuen, wenn ihr mit weiterhelfen könntet ^^ ^^ ^^


    DANKE
    Liebe Grüße
    shotput2020
  • Hallo yogimuc!

    Ich glaub nicht, dass der Befehl verarbeitet wird. Weil egal was ich da ab Codezeile 53 mache ändert nichts. Ich habe viele Versuche unternomme. Alles mit dem gleichen Ergebis:
    Webseite nicht verfügbar
    Die Webseite unter tel:0xxxxxxxxx konte nicht geladen weil:

    net::ERR_UNKNOWN_URL_SCHEME

    Die gesamte MainActivity.java File sieht so aus:

    Quellcode

    1. package com.meinprojekt.projekt;
    2. import android.app.Activity;
    3. import android.content.Intent;
    4. import android.net.Uri;
    5. import android.os.Bundle;
    6. import android.view.KeyEvent;
    7. import android.webkit.WebSettings;
    8. import android.webkit.WebView;
    9. import android.webkit.WebViewClient;
    10. import com.meinprojekt.projekt.R;
    11. public class MainActivity extends Activity {
    12. WebView myWebView;
    13. @Override
    14. protected void onCreate(Bundle savedInstanceState) {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.activity_main);
    17. myWebView = (WebView) findViewById(R.id.myWebView);
    18. myWebView.loadUrl("https://www.meinprojekt.work");
    19. myWebView.setWebViewClient(new WebViewClient() {
    20. public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
    21. viewx.loadUrl(urlx);
    22. return false;
    23. }
    24. });
    25. WebSettings webSettings = myWebView.getSettings();
    26. webSettings.setJavaScriptEnabled(true);
    27. }
    28. @Override
    29. public boolean onKeyDown(int keyCode, KeyEvent event) {
    30. if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
    31. myWebView.goBack(); // Go to previous page
    32. return true;
    33. }
    34. // Use this as else part
    35. return super.onKeyDown(keyCode, event);
    36. }
    37. public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
    38. if (urlx.startsWith("tel:")) {
    39. Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(urlx));
    40. startActivity(intent);
    41. return true;
    42. }
    43. viewx.loadUrl(urlx);
    44. return true;
    45. }
    46. }
    Alles anzeigen

    Aus der DOKU werde ich leider nicht schlau. Ich würde bitte nur Hilfe benöten um diese urlx.startsWith("tel:") korrekt zu verarbeiten.
    Der Rest läuft ja problemlos.

    lg
    shotput2020
  • Wieso hast du diese Methode zweimal?
    shouldOverrideUrlLoading

    Einmal in der onCreate reicht.

    Die zweite Methode wird bestimmt gar nicht aufgerufen werden.
    Zwei ist falsch macht hier keinen Sinn.

    Nur einen listener in der onCrate setzen. In dem die URL prüfen wenn es die gewünschte URL ist denn intent starten und false zurück geben.

    Ist die URL keine tel einfach true zurück geben ohne die URL neu zu laden.I


    Note: Do not call WebView#loadUrl(String) with the same URL and then return true. This unnecessarily cancels the current load and starts a new load with the same URL. The correct way to continue loading a given URL is to simply return false, without calling WebView#loadUrl(String).
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Danke für deine Anregung jogimuc
    Ich befürchte ich verstehe nur Bahnhof :)

    Einmal shouldOverrideUrlLoading habe ich entfernt.
    Mit dem Rest komme ich nicht weiter weil ich leider nicht verstehe was du meinst.

    Wäre trotzdem über Hilfe sehr dankbar :)
    So sieht die MainActivity.java jetzt aus. Fehlermeldung unverändert :)

    Quellcode

    1. package com.meines.meines;
    2. import android.app.Activity;
    3. import android.content.Intent;
    4. import android.net.Uri;
    5. import android.os.Bundle;
    6. import android.view.KeyEvent;
    7. import android.webkit.WebSettings;
    8. import android.webkit.WebView;
    9. import android.webkit.WebViewClient;
    10. import com.meines.meines.R;
    11. public class MainActivity extends Activity {
    12. WebView myWebView;
    13. @Override
    14. protected void onCreate(Bundle savedInstanceState) {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.activity_main);
    17. myWebView = (WebView) findViewById(R.id.myWebView);
    18. myWebView.loadUrl("https://www.domain.de");
    19. myWebView.setWebViewClient(new WebViewClient() {
    20. }
    21. );
    22. WebSettings webSettings = myWebView.getSettings();
    23. webSettings.setJavaScriptEnabled(true);
    24. }
    25. @Override
    26. public boolean onKeyDown(int keyCode, KeyEvent event) {
    27. if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
    28. myWebView.goBack(); // Go to previous page
    29. return true;
    30. }
    31. // Use this as else part
    32. return super.onKeyDown(keyCode, event);
    33. }
    34. public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
    35. if (urlx.startsWith("tel:")) {
    36. Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(urlx));
    37. startActivity(intent);
    38. return true;
    39. }
    40. viewx.loadUrl(urlx);
    41. return true;
    42. }
    43. }
    Alles anzeigen



    lg
    shotput2020
  • danke für deine mühen jogimuc.
    Ich verstehe leider nicht was du meinst versuche aber step by step...
    Stimmt mein ursprungsfile?

    Quellcode

    1. package name.work;
    2. import android.app.Activity;
    3. import android.content.Intent;
    4. import android.net.Uri;
    5. import android.os.Bundle;
    6. import android.view.KeyEvent;
    7. import android.webkit.WebSettings;
    8. import android.webkit.WebView;
    9. import android.webkit.WebViewClient;
    10. import name.work.R;
    11. public class MainActivity extends Activity {
    12. WebView myWebView;
    13. @Override
    14. protected void onCreate(Bundle savedInstanceState) {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.activity_main);
    17. myWebView = (WebView) findViewById(R.id.myWebView);
    18. myWebView.loadUrl("https://www.mydomain.work");
    19. myWebView.setWebViewClient(new WebViewClient() {
    20. public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
    21. viewx.loadUrl(urlx);
    22. return false;
    23. }
    24. });
    25. WebSettings webSettings = myWebView.getSettings();
    26. webSettings.setJavaScriptEnabled(true);
    27. }
    28. @Override
    29. public boolean onKeyDown(int keyCode, KeyEvent event) {
    30. if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
    31. myWebView.goBack(); // Go to previous page
    32. return true;
    33. }
    34. // Use this as else part
    35. return super.onKeyDown(keyCode, event);
    36. }
    37. }
    Alles anzeigen
    ich habe keinen plan wie wie die tel: funktion einbauen soll.
    lg
    shotput2020
  • HURRA!!!!!!!!!!!!!
    DANKE jogimuc!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ich habe es :) geschafft!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    So funktioniert es :)

    Quellcode

    1. package com.meines.meines;
    2. import android.app.Activity;
    3. import android.content.Intent;
    4. import android.net.Uri;
    5. import android.os.Bundle;
    6. import android.view.KeyEvent;
    7. import android.webkit.WebSettings;
    8. import android.webkit.WebView;
    9. import android.webkit.WebViewClient;
    10. import com.meines.meines.R;
    11. public class MainActivity extends Activity {
    12. WebView myWebView;
    13. @Override
    14. protected void onCreate(Bundle savedInstanceState) {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.activity_main);
    17. myWebView = (WebView) findViewById(R.id.myWebView);
    18. myWebView.loadUrl("https://www.meinedomain.de");
    19. myWebView.setWebViewClient(new WebViewClient() {
    20. public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
    21. if (urlx.startsWith("tel:")) {
    22. Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(urlx));
    23. startActivity(intent);
    24. return true;
    25. }
    26. return false;
    27. }
    28. });
    29. WebSettings webSettings = myWebView.getSettings();
    30. webSettings.setJavaScriptEnabled(true);
    31. }
    32. @Override
    33. public boolean onKeyDown(int keyCode, KeyEvent event) {
    34. if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
    35. myWebView.goBack(); // Go to previous page
    36. return true;
    37. }
    38. // Use this as else part
    39. return super.onKeyDown(keyCode, event);
    40. }
    41. }
    Alles anzeigen
    Liebe Grüße
    shotput2020
  • Quellcode

    1. public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
    2. if (urlx.startsWith("tel:")) {
    3. Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(urlx));
    4. startActivity(intent);
    5. return false;
    6. }
    7. return true;
    8. }
    ob das mit deinem prüfen der url "urlx" so richtig ist kann ich nicht sagen. Dazu müsstest du schon Debuggen was in der Variablen enthalten ist.
    Vielleicht machst du ein Log an der Stelle und gibst so den Inhalt aus.

    Auch ist dein Intent wenn es überhaupt aufgerufen wird nun vollständig.
    Frage wo übergibst du denn die vermeintlichen Nummer. Die musst du dier schon aus der URL holten.
    Dein pars wird so auch nicht gegen das wird der Tel Dialer nicht verstehen.

    Lasse dir mal anzeigen was in dem String urlx ist.
    Setze einen brackpoint in den listener wenn du nicht weißt was das ist solltest du dich mal mit debuggen beschäftigen.
    Ein Feedback auf Tipps ist auch schön. :P