android webview 与js交互

package com.example.webviewtest;

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


import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;

public class MainActivity extends Activity {
         private Button btn;
         private Handler hand;
         private String returnValue;
	@SuppressLint({ "JavascriptInterface", "NewApi" })
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		WebView web= (WebView) findViewById(R.id.webview);
		
		WebSettings settings = web.getSettings(); 
			settings.setUseWideViewPort(true); 
			settings.setLoadWithOverviewMode(true); 
			settings.setJavaScriptEnabled(true);  
			settings.setBuiltInZoomControls(true);
			settings.setSupportMultipleWindows(true);
			settings.setDefaultTextEncodingName("Utf-8");
			settings.setSupportZoom(true);
		
			CreatFileUrl(url);
		web.loadUrl("file://"+sdcardPath);
		TestObject to = new TestObject();
		web.addJavascriptInterface(to,"demo");
	 btn  = (Button) findViewById(R.id.btn_id);
	 hand = new Handler(new Handler.Callback() {
			@SuppressLint("CommitPrefEdits")
			public boolean handleMessage(Message msg) {
				switch(msg.what){
				case 1:
					btn.setText(returnValue);
					break;
					}
				return true;
			}
		});
	}
	private class TestObject {
		@SuppressWarnings("unused")
		public void getName(String name) {//这个方法是用来在html中被js所调用的;
		returnValue = name;
		hand.sendEmptyMessage(1);
		}
		}
	private String sdcardPath; //存储路径
	//自定义一个Html网页
	String url ="<head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />"
			+ "<title>test</title>"
			+ "<script type='text/javascript'>"
			+ "function getName(){"
			+ "demo.getName('js传递过来的值');}"  //对应web.addJavascriptInterface(to,"demo");
			+ "</script> "
			+ "</head> "
			+ "<body> "
			+ "<input type='button' onclick='getName()' value='点击传递值' height='30' width='200'> "
			+ "你好,我是内容"
			+ "</body></html>";
	/**
	 * 写入文件从文件读取
	 * 临时创建 文件夹 Html文件
	 * @param url
	 */
	public void CreatFileUrl(String url){
		try {
			sdcardPath = getCacheDir()+"/test.html";
			File fil = new File(sdcardPath);
			    try {
			    	if(fil.exists()){
			    		fil.delete();
						} 
			    	if(!fil.exists()){
					 fil.createNewFile();
			    	}
				} catch (IOException e) {
					e.printStackTrace();
				}
					
			FileOutputStream outStream = new FileOutputStream(fil);
			try {
	        	 String strGB2312 = new String(url.getBytes("Utf-8"),"Utf-8");  
				outStream.write(strGB2312.getBytes());				
			}
			
			catch (IOException ex)
			{
				ex.printStackTrace();
			}
			try
			{
				outStream.close();
			}
			catch (IOException ex)
			{
				ex.printStackTrace();
			}
		} 
		
		
		catch (FileNotFoundException ex)
		{
			ex.printStackTrace();
		}
		
	}

}


你可能感兴趣的:(android webview 与js交互)