理解に苦しむ仕様だが、Android アプリ開発中のこと、WebView でサイトを閲覧中に、
特定のリンク先の表示は端末デフォルトのブラウザで表示なんてことがあった。
要求のURLで判断する方法を WebView の shouldOverrideUrlLoading をオーバーライドの中で処置してみた。
制御するためのインターフェースを用意して
public interface URLManager{
// スタートページ Url 取得
public String startUrl();
// ブラウザ起動するか判定
public boolean isOut(String url);
}
正しい方法かどうかわからないが、外部ブラウザ起動したときに、
WebView を goBack() させた。
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.provider.Settings;
/**
* SampleActivity
*/
public class SampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// URLManager インスタンス生成
final URLManager uman = new URLManagerImpl();
WebView web = (WebView)findViewById(R.id.webview);
web.getSettings().setJavaScriptEnabled(true);
web.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view,String url){
if (!uman.isOut(url)){
view.loadUrl(url);
return true;
}
// 外部ブラウザ起動
Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse(url)){};
startActivity(i);
view.goBack();
return false;
}
});
// スタートページを表示
web.loadUrl(uman.startUrl());
}
}