最近在有涉及到Android连接网络打印机,看了下国内很少有相关的资料。所以,就给出自己弄出来的一个DEMO。主要还是通过Socket连接。这里就不废话了,直接贴上代码已经有注释.
package com.example.send2print;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.content.Context;
import android.content.pm.FeatureInfo;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v4.text.TextUtilsCompat;
import android.text.Html;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Socket client;
private FileInputStream fileInputStream;
private BufferedInputStream bufferedInputStream;
private OutputStream outputStream;
private Button button;
private TextView text;
private EditText etIp, etPort;
int port=0;
private String serNo = "201409098833";
private String orderNo = "A005";
private String CardNo = "00000356";
private String patType = "会员卡";
private String Amount = "300.00";
private String state = "支付完成";
private String time = "2014-09-09";
private final int NOFOUNDPRINTER = 0;
private final int PRINETNOPAGER = 1;
private final int CLIENTTIMEOUT = 2;
private boolean isNetWork;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button1); //reference to the send button
text = (TextView) findViewById(R.id.textView1); //reference to the text view
etIp = (EditText) findViewById(R.id.editText1);
etPort = (EditText) findViewById(R.id.editText2);
//打印设备网络IP
etIp.setText("192.168.2.249");
//打印设备端口号 一般为9100
etPort.setText("9100");
isNetWork = IsNetWork(this);
//Button press event listener
button.setOnClickListener(new View.OnClickListener() {
private File file;
public void onClick(View v) {
if(isNetWork){
//create file instance
port=Integer.parseInt(etPort.getText().toString());
file = new File("/mnt/sdcard/de_urgent_file.txt");
new Thread(){
@Override
public void run() {
super.run();
try
{
// client.connect(remoteAddr, timeout)
client = new Socket(etIp.getText().toString(), port);
// byte[] mybytearray = new byte[(int) file.length()]; //create a byte array to file
//
// fileInputStream = new FileInputStream(file);
// bufferedInputStream = new BufferedInputStream(fileInputStream);
//
// bufferedInputStream.read(mybytearray, 0, mybytearray.length); //read the file
//
// outputStream = client.getOutputStream();
//
// outputStream.write(mybytearray, 0, mybytearray.length); //write file to the output stream byte by byte
// outputStream.flush();
// bufferedInputStream.close();
// outputStream.close();
//打印输出 控制输出字符集位GBK 否则中文乱码
PrintWriter oStream = new PrintWriter((new OutputStreamWriter(client.getOutputStream(),"GBK")),true);
//Font f=new Font(String name, int style, int size);
// oStream.write(0x1c);
// oStream.write(0x21);
// oStream.write(4);
oStream.write(0x1c);
oStream.write(0x21);
oStream.write(8);
// oStream.write(0x1c);
// oStream.write(0x21);
// oStream.write(12);
oStream.println("\t\t"+"餐厅订单"+"\n");
String printStr = "交易流水:"+serNo+
"\n"+"商户名称:"+"测试商户"+
"\n"+"订单号:"+orderNo+
"\n"+"卡号:"+CardNo+
"\n"+"时间:"+time+
"\n"+"交易金额:"+Amount+
"\n"+"**********************************************************";
oStream.print(printStr);
oStream.println("\n\n");
//自动切纸
for (int i = 0; i < getCutPaperByte().length; i++) {
oStream.write(getCutPaperByte()[i]);
}
oStream.close();
client.close();
//text.setText("File Sent");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}else{
Toast.makeText(getApplicationContext(), "网络异常", 3000).show();
}
}
});
}
public static byte[] getCutPaperByte(){
byte [] buffer = new byte[5];
buffer[0]='\n';//命令必须是单行
buffer[1]=29;
buffer[2]=86;
buffer[3]=66;
buffer[4]=1;
return buffer;
}
//判断是否联网
public boolean IsNetWork(Context context){
ConnectivityManager cManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cManager.getActiveNetworkInfo();
if (info != null && info.isAvailable()){
//能联网
return true;
}else{
//不能联网
return false;
}
}
}
代码注释的大部分都为文档打印,在手机SD卡里一个TXT文档的打印。
为什么在code片段粘贴上去不能出现啊 ,算了 给大家麻烦了 code贴不上去,格式很难看啊 。抱歉抱歉。。。
demo和文档地址:http://download.csdn.net/detail/u013065139/7956445点击打开链接