2017-06-28 12 views
0

私は外部リンクを開くためのコードを統合するのに助けが必要です。私はブラウザでリンクを開くためにいくつかのコードを追加しましたが、webviewは単にリンクを開いてブラウザに指示しません。私のURLは正しいです。これはwebviewアプリケーションです。ブラウザで外部Webページを開く方法は?

package io.eulj.dongdaegu; 

import android.content.DialogInterface; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.Message; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.webkit.CookieManager; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.ProgressBar; 
import im.delight.android.webview.AdvancedWebView; 

public class MainActivity extends AppCompatActivity implements AdvancedWebView.Listener { 

    public AdvancedWebView webView; 
    private ProgressBar mPbar = null; 

    public static String url = "https://studywire.eulj.io/app"; 
    String webURL, webTitle; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

... 
... Irrelevant Code omitted 
... 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //mPbar = (ProgressBar) findViewById(R.id.loader); 

     webView = (AdvancedWebView) findViewById(R.id.newWeb); 
     webView.loadUrl(url); 
     webView.setListener(this, this); 

     WebSettings webSettings = webView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setAppCacheEnabled(false); 
     webSettings.setDomStorageEnabled(true); 
     webSettings.setCacheMode(webSettings.LOAD_NO_CACHE); 
     webSettings.setAllowFileAccess(true); 
     CookieManager cookieManager = CookieManager.getInstance(); 
     cookieManager.setAcceptCookie(true); 


     webView.setWebChromeClient(new WebChromeClient() { 
      @Override 
      public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { 
       AdvancedWebView newWebView = new AdvancedWebView(MainActivity.this); 
       WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
       transport.setWebView(newWebView); 
       resultMsg.sendToTarget(); 
       return true; 
      } 
     }); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
      webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
      webSettings.setAllowUniversalAccessFromFileURLs(true); 
     } else { 
      webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
     } 

     /*webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) { 
       mPbar.setVisibility(View.VISIBLE); 
      } 

      public void onPageFinished(WebView view, String url) { 
       mPbar.setVisibility(View.GONE); 
      } 
     });*/ 

     webView.setWebViewClient(new WebViewClient(){ 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       if (url != null && url.startsWith("https://studywire.eulj.io")) { 
        return false; 
       } else { 
        view.getContext().startActivity(
          new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
        return true; 
       } 
      } 
     }); 

     webView.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) { 
         webView.goBack(); 
         return true; 
       } 
       return false; 
      } 
     }); 

     webView.setThirdPartyCookiesEnabled(true); 
     webView.setCookiesEnabled(true); 

     webView.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       webView.loadUrl("file:///android_asset/noInternet.html"); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     //if (id == R.id.share_btn) { 
      Intent sharingIntent = new Intent(Intent.ACTION_SEND); 
      sharingIntent.setType("text/plain"); 
      String shareBody = webTitle + ":\n" + webURL; 
      sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "StudyWire"); 
      sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); 
      startActivity(Intent.createChooser(sharingIntent, "Share using")); 
     //} else if (id == R.id.action_settings) { 
     // return true; 
     //} 

     return super.onOptionsItemSelected(item); 
    } 


    @Override 
    protected void onResume() { 
     super.onResume(); 
     webView.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     webView.onPause(); 
     super.onPause(); 
    } 

    @Override 
    protected void onDestroy() { 
     webView.onDestroy(); 
     super.onDestroy(); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 
     webView.onActivityResult(requestCode, resultCode, intent); 
    } 

    @Override 
    public void onBackPressed() { 
     if (!webView.onBackPressed()) { 
      return; 
     } 
     super.onBackPressed(); 
    } 
} 
+0

お読みくださいを(// meta.stackoverflow.com/q/326569) - これはボランティアに対処する理想的な方法ではなく、おそらく回答を得ることに逆効果があるということです。これをあなたの質問に追加しないでください。 – halfer

答えて

0
WebViewClient webViewClient= new WebViewClient(){ 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url){ 
    return true; 
} 
@Override 
public void onLoadResource(WebView view, String url){ 
    try { 
     Intent i = new Intent(Intent.ACTION_VIEW); 
     i.setData(Uri.parse(url)); 
     startActivity(i); 
    } catch (ActivityNotFoundException ignored) { 
    } 
    } 
} 
0

問題は、あなたが(setWebViewClient()は現在のハンドラを置き換え)を2回WebViewClientをオーバーライドするので、あなたは、あなたが以前に書いたshouldOverrideUrlLoadingの実施を却下されている最後の時間です。 onReceivedErrorの実装をshouldOverrideUrlLoadingと同じWebViewClientインスタンスに置き、2番目のWebViewClientインスタンスを削除します。あなたのコードはすべきで、このようなものになります[?どのような状況下で、私はより速く答えを得るために、私の質問に、「緊急」または他の同様の句を追加することができ]

webView.setWebViewClient(new WebViewClient(){ 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url != null && url.startsWith("https://studywire.eulj.io")) { 
      return false; 
     } else { 
      view.getContext().startActivity(
         new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 
      } 
     } 
    }); 

    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     webView.loadUrl("file:///android_asset/noInternet.html"); 
    } 
関連する問題