2017-07-13 17 views
0

ブラウザ/メールから外部リンクをクリックすると、webview-appが開きます(この作品)。アンドロイド - webviewアプリで外部リンクを開く

。今問題: アプリケーションが閉じていると、リンクが正しく開きます。 アプリが既に開いている場合、リンクは開きません。

私は "shouldOverrideUrlLoading"で修正しようとしていましたが、関数は呼び出されません。

----コードを開始----

パブリッククラスMainActivityアクティビティあなたがonNewIntentに処理するために旧姓{

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

私は同様の質問に答えました。こちらをご覧くださいhttps://stackoverflow.com/questions/42367358/webview-on-android-7-0-doesnt-render-page/42367622#42367622 –

+0

[Android 7.0以降のWebViewではレンダリングできません]( https://stackoverflow.com/questions/42367358/webview-on-android-7-0-doesnt-render-page) –

答えて

1

を拡張します。アクティビティが既に開いている場合は、create onは再び呼び出されません。

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

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

私はあなたの仲間を愛する<3 働く –

関連する問題