我必须通过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进行打印?