2017-07-13 4 views
0

Wenn ich einen externen Link von Browser/Mail anklicke, öffnet sich meine Webview-App (diese Arbeit).android - externen Link in der Webview App öffnen

..und jetzt das Problem: Wenn die App geschlossen ist, wird die Verknüpfung korrekt geöffnet. Wenn die App bereits geöffnet ist, wird die Verknüpfung nicht geöffnet.

Ich dachte an das Fixieren mit "shouldOverrideUrlLoading", aber die Funktion wird nie aufgerufen.

---- Startcode ----

public class MainActivity erstreckt Aktivität {

private WebView mWebView; 
private Bundle savedInstanceState; 

/** 
* Dichiariamo l'attributo di classe url in cui 
* salviamo l'indirizzo web che aprirà la webview 
*/ 
private String url = "https://asp-center.fgp.biz?app=1&id="; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 


    Intent intent = getIntent(); 
    String action = intent.getAction(); 
    String type = intent.getType(); 

    if (savedInstanceState != null && intent.getData() != null) { 
     mWebView.restoreState(savedInstanceState); 
    } 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //carichiamo la webview dentro il layout specificato 
    mWebView = (WebView) findViewById(R.id.webView1); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.getSettings().setLoadsImagesAutomatically(true); 
    mWebView.getSettings().setDomStorageEnabled(true); 
    mWebView.getSettings().setBuiltInZoomControls(true); 

     //permette di gestire i _blank 
    mWebView.getSettings().setSupportMultipleWindows(false); 
    mWebView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { 
      WebView.HitTestResult result = view.getHitTestResult(); 
      String data = result.getExtra(); 
      Log.d("DATA", "" + data); 
      // view.loadUrl(data); 

      WebView newWebView = new WebView(view.getContext()); 
      WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
      transport.setWebView(view); 
      resultMsg.sendToTarget(); 
      return true; 
     } 

    }); 

    mWebView.requestFocusFromTouch(); 

    mWebView.setWebViewClient(new WebViewClient()); 
    mWebView.setWebChromeClient(new WebChromeClient()); 


    // prendo l'id del dispositivo che mi aiuta a controllare se è attivo l'auto-accesso (non sono richieste credenziali) per il suddetto dispositivo 
    String android_id = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID); 

    //scrivo del testo di debug 
    TextView t = (TextView)findViewById(R.id.textView); 
    t.setText("start"); 


    //imposto la url di default per l'apertura della app 
    String url = "http://fgp.intranet/ggweb/gol_home_mobile.php?app=1&id_device=" + android_id; 

    //controllo se l'apertura della app è stata fatta da un link esterno (come le mail di notifica richieste) 
    if(intent.getData() != null) { 

     //se è stata aperta esternamente, apro il link passato 
     url = intent.getData().toString(); 
     t.setText(url); 
     //url2 = intent.getData().toString(); 

    } else { 



    } 

    //carichiamo la url nella webview 
    mWebView.loadUrl(url); 

} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mWebView.saveState(outState); 
} 

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     TextView t = (TextView)findViewById(R.id.textView); 
     t.setText("shouldOverrideUrlLoading!"); 

     System.out.println("here"); 
     if (Uri.parse(url).getHost().equals("fgp.intranet")) { 
      // This is my web site, so do not override; let my WebView load the page 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 
} 

/** 
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
    TextView t = (TextView)findViewById(R.id.textView); 
    t.setText("bbbbbbbb!"); 

    String url=request.getUrl().toString(); 
    view.loadUrl("https://www.google.com"); 
    return true; 
} 
*/ 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) 
    { 
     mWebView.goBack(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

}

+0

vor einigen Monaten wurde ich die ähnliche Frage beantworten. Siehe https://stackoverflow.com/questions/42367358/webview-on-android-7-0-doesnt-render-page/42367622#42367622 –

+0

Mögliche Duplikate von [WebView auf Android 7.0+ rated Seite] (https://stackoverflow.com/questions/42367358/webview-on-android-7-0-doesnt-render-page) –

Antwort

1

Sie nee die in onNewIntent zu behandeln. On create wird nie wieder aufgerufen, wenn die Aktivität bereits geöffnet ist.

@Override 
protected void onNewIntent(final Intent intent) { 
    super.onNewIntent(intent); 

    if (intent == null) { 
     return; 
    }else{ 
     // Your code to handle intent 
    } 
} 
+0

Ich liebe dich bro <3 PERFEKT ARBEITEN –

Verwandte Themen