point
manifest.xml
permission追加しなくても動作している(デバッグ環境:USB+実機)では。
package com.example.t019_javascriptinterface;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
@author
public class Main extends Activity {
Context context;
LinearLayout base;
public static TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getApplicationContext();
base = new LinearLayout(context);
setContentView(base);
base.setOrientation(LinearLayout.VERTICAL);
final JsInterface js = new JsInterface(context);
tv = new TextView(context);
tv.setText("答え");
tv.setTextSize(40);
base.addView(tv);
final EditText et = new EditText(context);
base.addView(et);
Button btn = new Button(context);
btn.setText("計算");
base.addView(btn);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
TODO
Editable mondai = et.getText();
js.getAnswer(mondai);
}
});
}
}
JsInterface.java
package com.example.t019_javascriptinterface;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.text.Editable;
import android.util.Log;
import android.webkit.WebView;
@SuppressLint("SetJavaScriptEnabled")
public class JsInterface extends WebView {
public JsInterface(Context context) {
super(context);
this.getSettings().setJavaScriptEnabled(true);
this.addJavascriptInterface(new JavascriptAdapter(), "android");
this.loadUrl("file:///android_asset/eval.html");
}
public void getAnswer(Editable mondai){
Log.v("JsInterface","getAnswer:mondai="+mondai);
this.loadUrl("javascript:callEval('" + mondai + "')");
}
Handler mHandler = new Handler();
class JavascriptAdapter {
public void getAnswerFromJS(final String ans){
mHandler.post(new Runnable(){
@Override
public void run() {
TODO
Log.v("ans",""+ans);
Main.tv.setText(ans);
}
});
}
}
}
Eval.html
<script type="text/javascript">
function callEval(arg) {
window.android.getAnswerFromJS(eval(arg));
}
</script>