【发布时间】:2011-09-12 04:03:01
【问题描述】:
我想编写一个 Android 应用程序,该应用程序将连接到具有特定 IP 地址的网络打印机,然后进行打印。
对于打印,我知道我需要为特定的文件类型编写自己的 Postscript,并且通过 WIFI 连接到网络不是问题。
如何连接网络打印机?
【问题讨论】:
-
你找到解决方案了吗?
标签: android networking printing
我想编写一个 Android 应用程序,该应用程序将连接到具有特定 IP 地址的网络打印机,然后进行打印。
对于打印,我知道我需要为特定的文件类型编写自己的 Postscript,并且通过 WIFI 连接到网络不是问题。
如何连接网络打印机?
【问题讨论】:
标签: android networking printing
我的解决方案。我用的是 Epson 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" />
【讨论】:
尝试使用 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); //
}
【讨论】:
只需在 oncreate 方法后添加此代码
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
【讨论】:
任何连接到网络的设备都将通过其 IP 和端口/套接字进行通信。通过 telnet 或套接字连接并将数据写入其套接字缓冲区的最简单方法。
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();
}
【讨论】:
Star 有一个具有端口发现功能的 Android SDK。它会在您的网络上找到他们的任何 wifi 收据打印机。 http://starmicronics.com/support/SDKDocumentation.aspx
【讨论】:
好吧,您不能直接连接任何设备,因为您需要安装驱动程序。不过,有像Google Cloud print 这样的第三方应用程序可以与Android 无缝协作。
【讨论】:
您也许可以使用lpdspooler,也就是说,如果打印机支持 LPR/LPD。如果您可以提供有关环境(打印机等)的更多详细信息,我也许可以提供更多信息。
【讨论】: