2013年8月21日

【Android】JavaScriptからネイティブコードが呼べない



いろいろアプリを作っていたら、
Android 4.2系でJavaScriptからネイティブコードが呼べない事があったので、
解決方法のメモ。



JavaScriptのInterfaceを登録するには、
webview.addJavascriptInterface(new JSObject(this), "jsobject");

と登録していました。
そこは今までと変わらず、

4.2以降では、
このJSObjectのJavaScriptから呼び出すメソッドに、

@JavascriptInterface

のアノーテーションを付ける必要があるようです。

ので、

class JSObject {
  public JSObject(Context context) {
  }

  @JavascriptInterface // ここを追加
  public void callFromJS(String message) {
  }
}

ちなみに、ビルドターゲットも17以上にしないとビルド出来ないので、
古いターゲットのままでJavaScript Interfaceを使うのであれば、
上限を16とかにしておいた方が良いかもしれません。