在Android中實現javascript編程

jopen 11年前發布 | 37K 次閱讀 Android Android開發 移動開發

運行如圖:

在Android中實現javascript編程

在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 onclick="window.demo.clickOnAndroid(document.getElementById('code').value)">Go!</button></div>


</body>
</html>

打完收工。

來自:http://blog.csdn.net/qp120291570/article/details/8621473

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!