Я должен печатать через Windows Shared Printer на Android.Я использую приведенный ниже код, используя 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.MainActivity.doSmbPrinting (MainActivity.java:59) на com.abdu.sampleandroid.MainActivity.doPrint (MainActivity.java:47) на com.abdu.sampleandroid.MainActivity.onResume (MainActivity.java:41)
Пожалуйста, помогите мне в этом вопросе.Я могу добавить общий принтер в Mac с тем же URL-адресом smb и печатать.Его работа (единственное разочарование - это каждый раз запрашивать учетные данные).Как мы можем сделать печать с устройства Android на общем принтере Windows?
ОБНОВЛЕНИЕ
с кодом выше, я могу записать в файл в общей папке.Единственное изменение:
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?