本文出自:http://androidkaifa.com/thread-247-1-1.html
欢迎转载,转载请注明出自:www.androidkaifa.com
下面www.androidkaifa.com为大家分享一个实现android与javascript相互调用的项目,下面笔者为大家概况几个知识要点:
1.用WebView来显示HTML代码
欢迎转载,转载请注明出自:www.androidkaifa.com
下面www.androidkaifa.com为大家分享一个实现android与javascript相互调用的项目,下面笔者为大家概况几个知识要点:
1.用WebView来显示HTML代码
2.允许WebView执行JavaScript
webView.getSettings().setJavaScriptEnabled(true);
3.获取到HTML文件,也可从网络中获取webView.loadUrl("file:///android_asset/index.html"); //HTML文件存放在assets文件夹中(3):它是一个非常好的方法,但同时也存在安全危险,因为当HTML中的WebView存在完全隐患时,攻击者可以通过HTML页面向你的应用注入病毒,除非这个HTML文件是完全你你个人写的,排除存在完全隐患了,所以www.androidkaifa.com
推荐大家不要轻易从网络或是其它地方在你的项目中通过activity加载来一个javasrcipt文件,
代码:
2:首先我们要在配置文件加入
<uses-permission android:name="android.permission.INTERNET"/>权限
2:在项目的asset文件夹下面创建一个www文件,并将你的html文件存放在这文件下面,
main.xml布局文件中则包含textview和webview控件,
main.xml:
<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
androidrientation="vertical" >
<WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
androidrientation="vertical"
android:layout_weight="1">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceLarge"/>
</LinearLayout>
</LinearLayout>
3: JavaScriptInterfaceDemoActivity.java内容
public class JavaScriptInterfaceDemoActivity extendsActivity {
privateWebView Wv;
privateTextView myTextView;
finalHandler myHandler = new Handler();
/** Calledwhen the activity is first created. */
@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Wv =(WebView)findViewById(R.id.webView1);
myTextView = (TextView)findViewById(R.id.textView1);
finalJavaScriptInterface myJavaScriptInterface
= new JavaScriptInterface(this); //创建一个JavaScriptInterface对象
Wv.getSettings().setLightTouchEnabled(true);
Wv.getSettings().setJavaScriptEnabled(true);// 设置JavaScript启用。
// 添加一个对象, 让JS可以访问该对象的方法, 该对象中可以调用JS中的方法
Wv.addJavascriptInterface(myJavaScriptInterface,"AndroidFunction");
Wv.loadUrl("file:///android_asset/www/index.html"); //加载HTML文件
}
public classJavaScriptInterface {
ContextmContext;
JavaScriptInterface(Context c) {
mContext = c;
}
public void showToast(String webMessage){
finalString msgeToast = webMessage;
myHandler.post(new Runnable() {
@Override
public void run() {
// 执行UI线程
myTextView.setText(msgeToast);
}
});
Toast.makeText(mContext, webMessage,Toast.LENGTH_SHORT).show();
}
}
}
在这个类的onCreate方法中先是通过ID绑定了webview 和textview两个控件,然后是创建了一个JavaScriptInterface内部类,内部类有一个构造方法,用于初始化context,而在showToast方法中则是通过Handler运行一个用户线程来更新UI,
4:index.html文件:
<!DOCTYPE >
<htmlxmlns="http://www.w3.org/1999/xhtml" debug="true">
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport"content="width=device-width, initial-scale=1.0, maximum-scale=1.0,user-scalable=0">
<metaname="apple-mobile-web-app-capable" content="yes">
<metaname="viewport" content="target-densitydpi=device-dpi"/>
<scripttype="text/javascript">
function init()
{
vartestVal = document.getElementById('mytextId').value;
AndroidFunction.showToast(testVal);
}
</script>
</head>
<body>
<divstyle="float: left;width: 50%;">
<input type="text" style="width: 180px;"name="myText" id="mytextId" />
</div>
<divstyle="clear: both;height: 3px;"> </div>
<div>
<input value="submit" type="button"name="submit" id="btnSubmit"onclick="javascript:return init();" />
</div>
</body>
</html>