要使用Google服务,在建项目时就要选择Google API作为基础库,现有的版本为1.5和1.6,按常理是选用1.5,经过我的测试,用1.5写出的程序,在1.1和1.6下都能正常运行,但是用1.6写出的程序,在1.1下兼容性并不那么好。
下面就来看一下assets下的页面代码:
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=GB2312" /></head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("language", "1");
function google_translate(strInput,targetDIV) {
try {
google.language.translate(strInput, "", "zh-CN", function(result) {
if (!result.error) {
window.demo.runOnAndroidJavaScript(result.translation);
}
else {
google.language.translate(strInput, "en", "zh-CN", function(result) {
if (!result.error) {
window.demo.runOnAndroidJavaScript(result.translation);
}
else {
window.demo.runOnAndroidJavaScript(result.translation);
}
});
}
});
}
catch(e) {
alert("google_translate Error:"+e);
}
}
function translate(strTranslate) {
google_translate(strTranslate, "showDiv");
}
</script>
<body><div id="showDiv"></div></body>
</html>
主要就是加载Google API的一个js文件,然后调用其中的翻译方法。
其中demo.runOnAndroidJavaScript()是写在后台代码中的一个回调,相当于对window对象作了一个external处理,这样可以让js调回到后台的代码。
后台的代码如下:
public class OnlineTranslate extends Activity implements OnClickListener {
private EditText edt;
private TextView tv;
private Button btnGo;
private WebView wv;
private Handler h = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edt = (EditText) findViewById(R.id.edt);
btnGo = (Button)findViewById(R.id.btnGO);
wv = (WebView) findViewById(R.id.wv);
btnGo.setOnClickListener(this);
tv = (TextView)findViewById(R.id.tv);
wv.setVisibility(View.INVISIBLE);
WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSaveFormData(false);
webSettings.setSavePassword(false);
webSettings.setSupportZoom(false);
wv.addJavascriptInterface(new runJavaScript(), "demo");
String url = "file:///android_asset/google_translate.html";
wv.loadUrl(url);
}
final class runJavaScript {
public void runOnAndroidJavaScript(final String txt) {
h.post(new Runnable() {
public void run() {
tv.setText(txt.toString());
}
});
}
}
@Override
public void onClick(View v) {
if (edt.getText().toString() != "") {
wv.loadUrl("javascript:translate('" + edt.getText().toString() + "')");
}
}
}
上面的代码中,wv.addJavascriptInterface(new runJavaScript(), "demo");这一句就是注册external了,
当然你需要在界面上放一个WebView,用来接收这一页面
最后就是配置权限了,程序需要访问网络,必须给它这一许可
<uses-permission android:name="android.permission.INTERNET"></uses-permission>