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
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
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); } }}
Ref:
Ref: