在android中实现javascript编程

运行如图:




示例是插入排序的例子。


主要的思路就是在webview中将编辑后的代码保存为一个html文件中,再用另一个WebView来加载。

直接上代码。

首先在manifest文件中添加几个权限:

	<!-- 链接互联网权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 在SDCard中创建与删除文件权限 -->  
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
    <!-- 往SDCard写入数据权限 -->  
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >


    <WebView
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <WebView
        android:id="@+id/swebView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="gone" />

</RelativeLayout>

主activity:

package com.example.webtest1;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.http.util.EncodingUtils;

import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private WebView mWebView;
	private WebView sWebView;
	private Handler mHandler;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mWebView = (WebView) findViewById(R.id.webView);
		sWebView=(WebView) findViewById(R.id.swebView);
		sWebView.getSettings().setJavaScriptEnabled(true);

		mHandler=new Handler();
		// 得到WebSettings对象,设置支持JavaScript参数  
		// 如果访问的页面中有JavaScript,则WebView必须设置支持JavaScript ,否则显示空白页面  
		mWebView.getSettings().setJavaScriptEnabled(true); 
		sWebView.getSettings().setJavaScriptEnabled(true);
		mWebView.getSettings().setBuiltInZoomControls(true);  
		// 加载URL  
		mWebView.loadUrl("file:///android_asset/web/index.html");
		//sWebView.loadUrl("file:///android_asset/result.html");
		final class JSInterface{
			public void clickOnAndroid(final String jsCode) { 
				mHandler.post(new Runnable() {
					public void run() {  
						//Toast.makeText(MainActivity.this, "测试调用java"+s, Toast.LENGTH_LONG).show();
						mWebView.setVisibility(8);
						String html=""; 
						html += "<head>";  
						html += "<body>"+"<script>"+jsCode+"</script>"+"</body>";  
						html += "</head>"; 
						try {
							saveToSDCard("result.html",html);
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						
						Toast.makeText(MainActivity.this,html, Toast.LENGTH_LONG).show(); 
						sWebView.setVisibility(0);
						sWebView.loadUrl("file:///mnt/sdcard/result.html"); 
					} 
				}); 
			} 
		}
		mWebView.addJavascriptInterface(new JSInterface(), "demo");
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0,1,1,"back");
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	@Override    
	public boolean onMenuItemSelected(int featureId, MenuItem item) {    
		// TODO Auto-generated method stub    
		if(item.getItemId()==1) 
		{
			mWebView.setVisibility(0);
			sWebView.setVisibility(8);
		}
		return super.onMenuItemSelected(featureId, item);    
	}  
	//写数据到SD中的文件  
	   public void saveToSDCard(String filename, String content) throws Exception  
       {  
           //通过getExternalStorageDirectory方法获取SDCard的文件路径  
           File file = new File(Environment.getExternalStorageDirectory(), filename);  
           //获取输出流  
           FileOutputStream outStream = new FileOutputStream(file);  
           outStream.write(content.getBytes());  
           outStream.close();  
       }  
}

在asset/web中添加index.html

<html>
<body>
<h1>Js edit</h1>
<form>
<textarea id="code" name="code" cols="130" rows="15">
//InsertSort
function InsertSort(arr) { 
  var st = new Date();
  var temp, j;
  for(var i=1; i<arr.length; i++) {
   if((arr[i]) < (arr[i-1])) {
    temp = arr[i];
    j = i-1;
    do {
     arr[j+1] = arr[j];
     j--;
    }
    while (j>-1 && (temp) < (arr[j]));
    arr[j+1] = temp;
   }//endif
  }
  status = (new Date() - st) + ' ms';
  return arr;
 }
var testArray=[3,324,5345,6546,134,5654,665];


document.write("<p>TestArray:</p>");
document.writeln(testArray.toString());
InsertSort(testArray);
document.write("<p>After Sort:</p>");
document.writeln(testArray.toString());
</textarea>
	</form>
	<div id='b'><button οnclick="window.demo.clickOnAndroid(document.getElementById('code').value)">Go!</button></div>


</body>
</html>

打完收工。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值