如何通过Android连接网络打印机?

时间:2011-06-10 01:40:07

标签: android networking printing

我想编写一个Android应用程序,它将连接到具有特定IP地址的网络打印机,然后进行打印。

对于打印我知道我需要为特定文件类型编写自己的Postscript,并且连接到网络不是WIFI的问题。

如何连接网络打印机?

7 个答案:

答案 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无缝协作。