Je reçois "net :: ERR_UNKNOWN_URL_SCHEME" tout en appelant une option de numéro de téléphone à partir d'une page HTML sous Android. Dois-je ajouter une ou plusieurs autorisations dans le manifeste pour que cela fonctionne? Je n'ai rien ajouté dans le manifeste jusqu'à présent. Voici le code HTML:
<a href="tel:+1800229933">Call us free!</a>
Ce qui suit devrait fonctionner et ne nécessiter aucune autorisation dans le manifeste (essentiellement, remplacez devraitOverrideUrlLoading et gérez les liens séparément de tel, mailto, etc.):
mWebView = (WebView) findViewById(R.id.web_view);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if( url.startsWith("http:") || url.startsWith("https:") ) {
return false;
}
// Otherwise allow the OS to handle things like tel, mailto, etc.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity( intent );
return true;
}
});
mWebView.loadUrl(url);
Notez également que, dans l'extrait ci-dessus, j'active JavaScript, ce que vous voudrez probablement aussi, mais si, pour une raison quelconque, vous ne le faites pas, supprimez simplement ces 2 lignes.
Ce problème se produisait avec les liens mailto:
et tel:
dans une iframe (dans Chrome, pas une vue Web). En cliquant sur les liens, la page grise "page introuvable" apparaît; l'inspection de la page a révélé une erreur ERR_UNKNOWN_URL_SCHEME.
Ajouter target="_blank"
, comme suggéré par cette discussion sur le problème a corrigé le problème pour moi.
Essayez de cette façon, espérons que cela vous aidera à résoudre votre problème.
main.xml
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:gravity="center">
<WebView
Android:id="@+id/webView"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
</LinearLayout>
MyActivity.Java
public class MyActivity extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView = (WebView) findViewById(R.id.webView);
webView.loadData("<a href=\"tel:+1800229933\">Call us free!</a>", "text/html", "utf-8");
}
}
Ajoutez cette permission dans AndroidManifest.xml
<uses-permission Android:name="Android.permission.CALL_PHONE"/>