/var/log/messages

debugging with sixth sense

Android (しかも WebView 周辺) な問題処理

なんか色々微妙な問題が出て微妙な対処を盛り込んだのでいくつかメモを。

onBackPressed

とりあえず、WebView なソレは Fragment にしててトップの画面から某信号受信契機で信号なコードの種類で異なるコンテンツを表示させるナニ。あとリンク踏んだら WebView の中で遷移してて戻る処理を onBackPressed で書いた訳です。つうかちょい前まで onKeyDown で書いてました。

で、

1
    if (f instanceof WebViewFragment) {

なら goBack だの popBackStack だのという事をしてまして、そうではないトップ画面だった終了、ってしてたのですが

1
    super.onBackPressed();

これが終わらない。以下を参照して

onBackPressed() but Activity finished(), then onCreate(), onResume(). Cannot exit app

意味も分からぬまま修正を盛り込んで

1
2
    ActivityCompat.finishAffinity(this);
    finish();

事なきを得ていたり。

WebView#postUrl のパラメータ

複数の場合、以下な記述で良いのですね。

1
2
    String postData = "a=xxx&b=yyy&c=zzz";
    webView.postUrl(url, postData.getBytes());

別 Activity の WebView における backStack の初期化

こちらも某信号受信契機で初期化を、なリクエストがあったのですが、以下を鵜呑みに

実装盛り込み。

1
2
        getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        getSupportFragmentManager().beginTransaction()

最後に

バージョン番号トップ画面に表示しておいて、と言われ最初は build.gradle で文字列リソース使えないかな、って思ってたのですが

1
2
3
defaultConfig {
    versionName "1.0.0"
}            

なソレって BuildConfig 経由で参照できるんスね。忘れてました。以下なカンジで事なきを得ていたり。

1
2
    TextView tv = (TextView)view.findViewById(R.id.versionName);
    tv.setText(BuildConfig.VERSION_NAME);

いやはや、色々微妙です。上記、別途きちんと確認の方向にて。

追記

その後、Javascript Interface 経由で云々、なリクエストが来た。さくっと実装したは良いのですが、Release なビルドで動かない。確認してみるに proguard でなんちゃらしてると Javascript Interface なソレがスルーになる模様。以下なエントリのフォローを参考にさせて頂きました。

Javascript Interface を有効にする proguard な記述は以下で汎用的に使える、とのことでした。素晴しい。

1
2
3
4
-keepattributes JavascriptInterface
-keepclasseswithmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

Comments