从Windows共享打印机上的android设备打印

时间:2018-12-21 09:03:56

标签: java android smb jcifs

我必须通过Android上的Windows共享打印机进行打印。我使用jcifs-1.3.19.jar使用以下代码。

 private void doSmbPrinting() {
    try {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication("", "username", "password");

        SmbFile smbFile = new SmbFile("smb://username:password@10.0.0.53/SHARENAME/Untitled", authentication);
        SmbFileOutputStream uncOut = new SmbFileOutputStream(smbFile); // Exception is in this line
        PrintWriter uncPrint = new PrintWriter(uncOut);
        uncPrint.println("print text ");
        uncPrint.flush();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我遇到以下错误:

  

12-21 14:19:13.729 26993-26993 / com.abdu.sampleandroid W / System.err:jcifs.smb.SmbException:参数不正确。           在jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)           在jcifs.smb.SmbTransport.send(SmbTransport.java:663)        12-21 14:19:13.730 26993-26993 / com.abdu.sampleandroid W / System.err:位于jcifs.smb.SmbSession.send(SmbSession.java:238)           在jcifs.smb.SmbTree.send(SmbTree.java:119)           在jcifs.smb.SmbFile.send(SmbFile.java:775)           在jcifs.smb.SmbFile.open0(SmbFile.java:992)           在jcifs.smb.SmbFile.open(SmbFile.java:1009)        12-21 14:19:13.731 26993-26993 / com.abdu.sampleandroid W / System.err:at jcifs.smb.SmbFileOutputStream。(SmbFileOutputStream.java:142)           在jcifs.smb.SmbFileOutputStream。(SmbFileOutputStream.java:97)           在jcifs.smb.SmbFileOutputStream。(SmbFileOutputStream.java:67)           在com.abdu.sampleandroid.MainActivity.doSmbPrinting(MainActivity.java:59)           在com.abdu.sampleandroid.MainActivity.doPrint(MainActivity.java:47)           在com.abdu.sampleandroid.MainActivity.onResume(MainActivity.java:41)

请帮助我解决此问题。我可以在Mac中使用相同的smb url添加共享打印机,并进行打印。它的工作(唯一的挫败是每次询问的凭证)。我们如何在Windows共享打印机上通过Android设备进行打印?

更新

使用上述代码,我可以写入共享文件夹中的文件。唯一的改变是

 SmbFile smbFile = new SmbFile("smb://username:password@10.0.0.53/FOLDERNAME/file.txt", authentication);

这也有效,无需在URL中提供用户名和密码。由于存在NtlmPasswordAuthentication

 SmbFile smbFile = new SmbFile("smb://10.0.0.53/FOLDERNAME/file.txt", authentication);

所以我怀疑这段代码是在共享文件夹中写一个文件(或者写到打印机上是可以的)。如果是这样,我们如何使用jcifs.smb进行打印?

0 个答案:

没有答案