Android WebView
PrintWebActivity
package com.zkc.pinter.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Picture; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Environment; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.View; import android.webkit.JavascriptInterface; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.example.btpdemo76.R; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.zkc.helper.printer.*; /** * Created by NickChung on 3/20/15. */ public class PrintWebActivity extends Activity { public WebView newWebView = null; List<Map<String, String>> listData = new ArrayList<Map<String, String>>(); private long firstTime = 0; private String title; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_print_web); title = getTitle().toString(); final EditText txtUrl = (EditText) findViewById(R.id.txtURL); final WebView mWebView = (WebView) findViewById(R.id.wvSite); final Button btnGo = (Button) findViewById(R.id.btnGo); final Button btnGoBack = (Button) findViewById(R.id.btnGoBack); final Button btnForward = (Button) findViewById(R.id.btnForward); final Button btnReload = (Button) findViewById(R.id.btnReload); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); mWebView.addJavascriptInterface(new WebAppInterface(this), "android"); mWebView.getSettings().setSupportMultipleWindows(true); mWebView.getSettings().setDisplayZoomControls(true); mWebView.getSettings().setBuiltInZoomControls(true); txtUrl.setText("http://www.ri-pai.com/AdminHellToBid/index.php/Index/Index.html"); //txtUrl.setText("http://192.168.0.106/bt.html"); if (!txtUrl.getText().toString().isEmpty()) { mWebView.loadUrl(txtUrl.getText().toString()); } mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器 view.loadUrl(url); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { setTitle(title + "(Loading...)"); super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { setTitle(title + "(100%)"); super.onPageFinished(view, url); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); view.loadDataWithBaseURL("about:blank" , "<a style="font-size: 36px;">访问出错,请检查:<br />1.WIFI是否已经连接 <br />2.网页地址是否正确 <br /<(^_^)</a>" , "text/html" , "UTF-8", null); } }); mWebView.setWebChromeClient(new MyWebChromeClient()); /* mWebView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, final int newProgress) { // TODO Auto-generated method stub runOnUiThread(new Runnable() { @Override public void run() { setTitle(title + "(" + String.valueOf(newProgress) + "%)"); } }); } });*/ btnGo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mWebView.loadUrl(txtUrl.getText().toString()); } }); btnGoBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mWebView.goBack(); } }); btnForward.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mWebView.goForward(); } }); btnReload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mWebView.reload(); } }); //PrintActivity.pl.printText(mWebView.getTitle() + "\r\n"); //PrintActivity.pl.printImage(BitmapFactory.decodeResource(getResources(), R.drawable.demo)); } public boolean dispatchKeyEvent(KeyEvent event) { // TODO Auto-generated method stub if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_BACK) { Intent i = new Intent(Intent.ACTION_MAIN); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.addCategory(Intent.CATEGORY_HOME); startActivity(i); return true;//返回true,把事件消费掉,不会继续调用onBackPressed } return super.dispatchKeyEvent(event); } /* @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); Resources res = getResources(); String[] cmdStr = res.getStringArray(R.array.cmd); for (int i = 0; i < cmdStr.length; i++) { String[] cmdArray = cmdStr[i].split(","); if (cmdArray.length == 2) { Map<String, String> map = new HashMap<String, String>(); map.put("title", cmdArray[0]); map.put("description", cmdArray[1]); menu.add(0, i, i, cmdArray[0]); listData.add(map); } } return true; } @Override public boolean onOptionsItemSelected(android.view.MenuItem item) { Map map = listData.get(item.getItemId()); String cmd = map.get("description").toString(); byte[] bt = PrintCmdActivity.hexStringToBytes(cmd); PrintActivity.pl.write(bt); return false; }*/ }
LabelViewActivity
package com.zkc.pinter.activity; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Picture; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import com.example.btpdemo76.R; import com.zkc.helper.printer.PrinterClass; import com.zkc.helper.printer.WebAppInterface; /** * Created by NickChung on 3/25/15. */ public class LabelViewActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_label_view); final WebView mWebView = (WebView) findViewById(R.id.wvLabel); final Button btnPrint = (Button) findViewById(R.id.btnPrint); final Button btnCR = (Button) findViewById(R.id.btnCR); final Button btnBack = (Button) findViewById(R.id.btnBack); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new WebAppInterface(this), "android"); mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); mWebView.loadUrl(getIntent().getStringExtra("url")); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器 view.loadUrl(url); return true; } }); btnBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Intent it = new Intent(LabelViewActivity.this, PrintWebActivity.class); //startActivity(it); LabelViewActivity.this.onBackPressed(); } }); btnCR.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(PrintActivity.pl.getState() != PrinterClass.STATE_CONNECTED) { Intent intent = new Intent(LabelViewActivity.this, MainActivity.class); startActivity(intent); } byte[] bt = PrintCmdActivity.hexStringToBytes("0A"); PrintActivity.pl.write(bt); } }); btnPrint.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(PrintActivity.pl.getState() != PrinterClass.STATE_CONNECTED) { Intent intent = new Intent(LabelViewActivity.this, MainActivity.class); startActivity(intent); } Picture pic = mWebView.capturePicture(); int width = pic.getWidth(); int height = pic.getHeight(); if (width > 0 && height > 0) { Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bmp); pic.draw(canvas); try { /* String fileName = Environment.getExternalStorageDirectory() + "/" + System.currentTimeMillis() + ".png"; FileOutputStream fos = new FileOutputStream(fileName); if (fos != null) { bmp.compress(Bitmap.CompressFormat.PNG, 90, fos); fos.close(); } Toast.makeText(getApplicationContext(), "截图成功,文件名是:" + fileName, Toast.LENGTH_SHORT).show(); */ PrintActivity.pl.printImage(bmp); } catch (Exception e) { e.printStackTrace(); } } } }); } public boolean dispatchKeyEvent(KeyEvent event) { // TODO Auto-generated method stub if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_BACK) { return true;//返回true,把事件消费掉,不会继续调用onBackPressed } return super.dispatchKeyEvent(event); } }
WebAppInterface
package com.zkc.helper.printer; import android.content.Context; import android.content.Intent; import android.webkit.JavascriptInterface; import android.widget.Toast; import com.zkc.pinter.activity.LabelViewActivity; /** * Created by NickChung on 3/25/15. */ public class WebAppInterface { Context mContext; /** * Instantiate the interface and set the context */ public WebAppInterface(Context c) { mContext = c; } /** * Show a toast from the web page */ // 如果target 大于等于API 17,则需要加上如下注解 @JavascriptInterface public void showWeb(String url) { Intent intent = new Intent(mContext, LabelViewActivity.class); intent.putExtra("url", url); mContext.startActivity(intent); } }
bt.html
<html> <head> <script type="text/javascript"> function showWeb(url){ try{ window.android.showWeb(url); } catch(ex){} } </script> </head> <body> <input type="button" value="View" onclick="showWeb('http://www.ybidder.com/PrintTest.html');"> </body> </html>
MyWebChromeClient
package com.zkc.pinter.activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Handler; import android.os.Message; import android.view.Display; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import com.example.btpdemo76.R; //**************************************************************************** public class MyWebChromeClient extends WebChromeClient { public WebView newWebView = null; @Override public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) { newWebView = new WebView(view.getContext()); view.addView(newWebView); WebSettings settings = newWebView.getSettings(); settings.setJavaScriptEnabled(true); //这个setWebViewClient要加上,否则window.open弹出浏览器打开。 newWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { View dlgView = LayoutInflater.from(view.getContext()).inflate(R.layout.popup, null); WebView wvPop = (WebView) dlgView.findViewById(R.id.wvPop); wvPop.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器 view.loadUrl(url); return true; } }); wvPop.loadUrl(url); final AlertDialog dlg = new AlertDialog.Builder(view.getContext()) .setIcon(R.drawable.ic_launcher) .setTitle(view.getTitle()) .setView(dlgView) .setPositiveButton("返回",null) .create(); /* Button btnExit = (Button) dlgView.findViewById(R.id.btnExit); btnExit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dlg.cancel(); } });*/ dlg.show(); Window win = dlg.getWindow(); win.getDecorView().setPadding(0, 0, 0, 0); WindowManager.LayoutParams lp = win.getAttributes(); lp.width = WindowManager.LayoutParams.MATCH_PARENT; lp.height = WindowManager.LayoutParams.WRAP_CONTENT; win.setAttributes(lp); return true; } }); newWebView.setWebChromeClient(this); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(newWebView); resultMsg.sendToTarget(); return true; } @Override public void onCloseWindow(WebView view) { if (newWebView != null) { newWebView.setVisibility(View.GONE); view.removeView(newWebView); } } }