печать с устройства Android на принтере с общим доступом Windows - PullRequest
0 голосов
/ 21 декабря 2018

Я должен печатать через 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?

...