節約情報 HT-03A IS01,03,05 SH-10B Galaxy etc WiFi環境 開発ノウハウ 参考情報
トップページ > 開発ノウハウ > Android1.6以降対応アプリのwebViewでTwitterがずーと表示されない現象への対処
スマートフォン版に切り替える(New!)

開発ノウハウ

Android1.6以降対応アプリのwebViewでTwitterがずーと表示されない現象への対処

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
}