来源: http://android.auaudata.com/android16webviewtwitter.html
亲自测试通过
ANdroid1.6一下的用法值得学习
AndroidアプリでWebページを表示する場合、画面全体に表示してよいなら、標準のブラウザにインテント(Intent)を投げればよいのですが、画面の一部にWebページを表示したい場合、webViewを使用することになるはずです。
ここで問題が発生する場合があります。
いずれの時期には解決するかもしれませんが、2011年9月上旬時点、L-04Cにて、Twitterを表示させようとすると、リングのマークがずーとグルグル回った画面が表示され、それ以降、ページが表示されない不具合があります。
どうやらこの問題に対しては、ググると、
webView.getSettings().setDomStorageEnabled(true);
で解決するらしいのですが、Android1.6以降を対象とした場合には、このメソッドを使うことができません。
Android1.6の端末は少なくなってきているものの、まだまだ使われているので、よほどのことがない限り、1.6でも動作させたいと思っていました。
これの対処方法をずーと調べていました。
すると、こちらの記事で解決することになるのですが、
Backwards compatibility in Android
説明がないと分かりづらいので簡単に説明します。
キーワードは「後方互換性」です。
簡単に言うと、ソフトウェアを資産として活用できるようにするため、昔のバージョンで書いたコードは新しいバージョンでも動かせるよ!というのを「後方互換性がある」といいます。
解決策は、後方互換性を考慮してプログラムを書けばよい・・・です。
今回の場合、Android1.6でも構文エラーにならなくて、Android2.1以降の場合、
webView.getSettings().setDomStorageEnabled(true);
と同様の設定をしてあげればよいです。
最後にこれを実現するソースコードを掲載します。
(上記参考記事のページにはいくつもソースコードが掲載されていて、どれを使えばよいかが迷うので、実際に使えたものを掲載しておきます)
WebSettings webSettings = webView.getSettings();
try
{
// enable Dom Storage (API lvl 7)
Class[] setDomStorageEnabledSignature = new Class[] { boolean.class };
Method setDomStorageEnabled = webSettings.getClass()
.getMethod("setDomStorageEnabled", setDomStorageEnabledSignature);
setDomStorageEnabled.invoke(
webSettings, new Object[] { Boolean.valueOf(true) });
}
catch (NoSuchMethodException ex)
{
Log.i("YourLogTag", "Dom storage not available.");
}
catch (InvocationTargetException ex)
{
// oops something went wrong. Handle that here
}
catch (IllegalAccessException ex)
{
// oops something went wrong. Handle that here
}