2013-06-17 3 views
3

Я разрабатываю приложение для ресторана, которое печатает квитанции после покупок клиентов. Я добавил экран конфигурации в приложении, который менеджер использует для настройки принтеров. Менеджер может распечатать тестовую страницу, чтобы проверить, ввел ли он правильный ip и порт. Вот мой код, который печатает тестовую страницу:Android распечатать текст на принтере

private class PrintTask extends AsyncTask<Printer, Boolean, String> { 

    @Override 
    protected String doInBackground(Printer... params) { 

     try { 
      publishProgress(true); 
      Socket sock = new Socket(params[0].getIp(), Integer.parseInt(params[0].getPort())); 

      PrintWriter oStream = new PrintWriter(sock.getOutputStream()); 
      oStream.printf("--------------------------------\r\n"); 
      oStream.printf("***  TEST PRINT  ***\r\n"); 
      oStream.printf("You have configured your \n\r"); 
      oStream.printf(params[0].getName()); 
      oStream.printf("\r\nprinter successfully\n\r"); 
      oStream.printf("|   Thanks    |\r\n"); 
      oStream.printf("--------------------------------\r\n"); 
      oStream.close(); 
      sock.close(); 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     publishProgress(false); 
     return ""; 
    } 

    @Override 
    protected void onProgressUpdate(Boolean... values) { 
     // TODO Auto-generated method stub 
     super.onProgressUpdate(values); 
     if(!values[0]) { 
      waitView.setVisibility(View.GONE); 
     } 
     else { 
      waitView.setVisibility(View.VISIBLE); 
     } 
    } 

} 

Проблема заключается в том, если я печатаю на сетевом принтере (самостоятельный принтер без подключения к любому ПК) печатает текст правильно. Здесь я использую ip и порт по умолчанию 9100. Но когда я печатаю на общий принтер, подключенный к ПК, он не распечатывается. Любая идея, где я делаю неправильно ... ???

+0

Вы можете указать, какой принтер вы использовали? Я пробовал этот код на Brother HL-2135W, и он ничего не выводил. – George

+0

Это был принтер HP LaserJet. Вы добавили разрешение доступа к интернету в манифест? –

+0

я сделал. George

ответ

0

От того, что вы описали, похоже, что этот автономный принтер выполняет какую-то «службу текстовой печати» на вашем данном порту. Таким образом, похоже, что все, что вы отправляете на этот порт, будет напечатано как текст.

Принимая во внимание, что на вашем компьютере с ОС Windows установлен «общий» принтер, он реализован с использованием службы Windows Printer или smth. Это не просто простой сокет/порт, где вы можете писать текст ASCII.

+0

Я так думаю. Любая идея, как отправить печать на такой общий принтер? –

+0

Похож на Правильный способ печати с Android - использовать службу Cloud Print. Вам нужно будет сделать ваш принтер доступным через Виртуальный принтер Google [ссылка] http://www.howtogeek.com/165778/everything-you-need-to-know-about-printing-from-your-android-phone -or-tablet/(он будет прикреплен к вашей учетной записи google), а позже вы можете использовать [Google Cloud Cloud API] https://developers.google.com/cloud-print/ для печати. –

+0

Или другой простой вариант - просто написать простую «серверную» программу, которая будет работать на компьютере с Windows (тот, который используется совместно с принтером), и будет прослушивать текстовые команды и соответственно отправлять их на принтер. Таким образом, ваш код на устройствах Android остается прежним, и только сторона с окнами становится более сложной. –

Смежные вопросы