天天看点

Android 手机 链接 网络打印机

最近在有涉及到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点击打开链接