I collegamenti interni di base non funzionano nell'applicazione a nido d'ape?

I collegamenti interni non sembrano funzionare nella versione Android 3 nella mia app pubblicata. La mia app punta a Froyo a questo punto.

L'applicazione funziona bene in tonnellate di telefoni, ma la mia nuova scheda Galaxy non è in grado di gestire i collegamenti interni! Può gestirli all'interno di una pagina html, vale a dire:

  • Sto provando a cercare posti vicini come banche, ristoranti, bancomat all'interno della zona disegnata su Google Maps in android
  • Kotlin Coroutines è il modo giusto per Android
  • Terminare qualsiasi attività precedente in pila dall'attività corrente?
  • Aprire un file selezionato (image, pdf, ...) in modo programmato dalla mia applicazione Android?
  • notifica di google Cloud Messaging Push
  • Come aggiornare il contenuto di ViewPager?
  • <a href="#faq">Go to faq</a> <!-- goes to FAQ link --> 

    Passa alla tag inferiore nella stessa pagina:

     <a name="faq" id="faq"></a> 

    Tuttavia da un altro file html, cioè la pagina di indice, il collegamento non funziona più in Honeycomb:

     <a href="mainpage.html#faq">FAQ</a> <!-- goes to error page --> 

    Inoltre, se vado a un collegamento interno, e da qui segui un collegamento ad un'altra pagina, quindi premete il button indietro, (è ignorato per andare alla pagina webview precedente) si ottiene lo stesso errore:

     The webpage at file:///android_asset/folder/mainpage.html#faq might be temporarily down or it may have moved permanently to a new web address 

    WTF! La pagina web è stata appena nella pagina, ma ti sei ritrovata 1 secondo dopo, e non riesco a trovarla. Non può anche collegarsi da un'altra pagina html, ma tutto funziona bene in 1.x, 2.x, non solo 3.1 (non hanno provato 3.0)

    NOTA: Ho visto questa domanda quasi identica: android_asset non funziona su Honeycomb? Ma nel mio path di risorse non esistono spazi.

    Ho provato con e senza il webclient e ho provato le impostazioni di DOM e di cache senza alcun risultato. Ecco un esempio di quello che ho attualmente in oncreate:

      browser = new WebView(this); // browser = (WebView) findViewById(R.id.webkit); // tried with XML and without browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); browser.getSettings().setJavaScriptEnabled(true); browser.getSettings().setPluginsEnabled(true); // browser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // browser.getSettings().setUseWideViewPort(true); browser.setBackgroundColor(Color.parseColor("#333333")); browser.setInitialScale(1); browser.getSettings().setBuiltInZoomControls(true); final Activity MyActivity = this; browser.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { // Make the bar disappear after URL is loaded, and changes // string to Loading... setProgressBarIndeterminateVisibility(true); MyActivity.setTitle(" Loading . . . " + progress + "%"); MyActivity.setProgress(progress * 100); // Make the bar if (progress == 100) { setTitle(" APP TITLE YADA YADA"); setProgressBarIndeterminateVisibility(false); } } }); browser.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // Handle the error } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); // note I tried with and without overriding this return true; } }); setContentView(browser); browser.loadUrl("file:///android_asset/folder/page.html"); 

  • Errore: ANDROID_HOME non è impostato e il command "android" non è nel tuo PATH. È necessario soddisfare alless una di queste condizioni
  • Validazioni in android / eclipse
  • Come viene misurato l'accuratezza della posizione in Android?
  • Che cos'è l'equivalente di Android per NSURLProtocol dal iOS SDK?
  • C'è un modo per riprodurre file video .flv in app android?
  • Cambiare stile CalendarView
  • 2 Solutions collect form web for “I collegamenti interni di base non funzionano nell'applicazione a nido d'ape?”

    Ecco la soluzione che uso. Funziona lo stesso su tutte le piattaforms Android (testato su tutti i 1.6 a 4.0.1)

    Caricare il file come normalmente, senza il punto di ancoraggio. Per esempio:

     webview.loadUrl("file:///android_asset/file.html"); 

    Carica l'URL senza il punto di ancoraggio (ad es. File: ///android_asset/file.html) e aggiungi:

     webview.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { if (this.anchor != null) { view.loadUrl("javascript:window.location.hash='" + this.anchor + "'"); this.anchor = null; } } }); 

    where l'ancora è il punto di ancoraggio che si desidera saltare.

    devi assicurarsi che il javascript sia abilitato:

     WebSettings webSettings = webview.getSettings(); webSettings.setJavaScriptEnabled(true); 

    Questo è per il caricamento del file nel webview. Ora, se vuoi prendere collegamenti interni che sono ora rotti, come suggerito nell'altra risposta, sovrascrivere il metodo onReceivedError e inserire qualcosa come:

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { int found = failingUrl.indexOf('#'); if (found > 0) { anchor = failingUrl.substring(found + 1, failingUrl.length()); view.loadUrl(failingUrl.substring(0, found)); } } 

    Ecco il mio codice di rotazione in modo che il bug sia trasparente all'utente.
    Definire il WebViewClient per il browser e includere qualcosa come il seguente per onReceivedError:

      @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { if (failingUrl.contains("#")) { Log.v("LOG", "failing url:"+ failingUrl); final int sdkVersion = Integer.parseInt(Build.VERSION.SDK); if (sdkVersion > Build.VERSION_CODES.GINGERBREAD) { String[] temp; temp = failingUrl.split("#"); view.loadUrl(temp[0]); // load page without internal link try { Thread.sleep(400); } catch (InterruptedException e) { e.printStackTrace(); } } view.loadUrl(failingUrl); // try again } else { view.loadUrl("file:///android_asset/tableofcontents.html"); } } }); 

    Questo truffa la visualizzazione web per caricare la pagina prima senza il #link, quindi per 4,4 secondi di rest e quindi caricare nuovamente l'URL completo. Ho scelto di fare questo trucco per le compresse solo da sdkVersion. Se esiste un altro errore carichi un'altra pagina, il tableofcontents.html. Questo funziona per risolvere il problema sulla mia scheda Galaxy.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.