我想编写一个Android应用程序,它将连接到具有特定IP地址的网络打印机,然后进行打印。
对于打印我知道我需要为特定文件类型编写自己的Postscript,并且连接到网络不是WIFI的问题。
如何连接网络打印机?
答案 0 :(得分:14)
连接到网络的任何设备都将通过其IP和端口/插槽进行通信。最简单的方法是通过telnet或socket连接并将数据写入其套接字缓冲区。
try
{
Socket sock = new Socket("192.168.1.222", 9100);
PrintWriter oStream = new PrintWriter(sock.getOutputStream());
oStream.println("HI,test from Android Device");
oStream.println("\n\n\n");
oStream.close();
sock.close();
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
答案 1 :(得分:1)
您可以使用lpdspooler,也就是说,如果打印机支持LPR / LPD。如果您可以提供有关环境的更多详细信息(打印机等),我可能会提供更多信息。
答案 2 :(得分:1)
在oncreate方法之后添加此代码
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
答案 3 :(得分:0)
Star有一个Android SDK,它有端口发现功能。它会在你的网络上找到他们的任何wifi收据打印机。 http://starmicronics.com/support/SDKDocumentation.aspx
答案 4 :(得分:0)
尝试使用PrintManager:https://developer.android.com/training/printing/custom-docs
private void doPrint() {
// Get a PrintManager instance
PrintManager printManager = (PrintManager) getActivity()
.getSystemService(Context.PRINT_SERVICE);
// Set job name, which will be displayed in the print queue
String jobName = getActivity().getString(R.string.app_name) + " Document";
// Start a print job, passing in a PrintDocumentAdapter implementation
// to handle the generation of a print document
printManager.print(jobName, new MyPrintDocumentAdapter(getActivity()),
null); //
}
答案 5 :(得分:0)
我的解决方案。我用的是爱普生TM系列。我认为默认端口是 9100。 在清单中添加:
<uses-permission android:name="android.permission.INTERNET"/>
在活动中使用线程,否则你会出现 android.os.NetworkOnMainThreadException 错误。
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Socket sock = new Socket("192.168.1.168", 9100);
PrintWriter oStream = new PrintWriter(sock.getOutputStream());
oStream.println("Hi, test from Android Device");
oStream.println("\n");
oStream.close();
sock.close();
} catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}});
如果还不够,请在清单中添加:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
答案 6 :(得分:-1)
嗯,您无法直接连接任何设备,因为您需要安装驱动程序。还有第三方应用程序,如Google Cloud打印,可以与Android无缝协作。