2014-12-22 3 views
2

나는 tutorial on the cloud print website을 따라했으며 예제 코드를 복사하여 붙여 넣어 인쇄 활동을 만들었습니다.장치에서 인쇄 할 수 없음

MediaStore에서 이미지를 인쇄하려고하는데 인쇄 화면까지 가면 '인쇄'버튼을 눌러도 아무런 변화가 없습니다.

콘텐츠 같은 외모를 기록하고 내가 의도

Intent printIntent = new Intent(GalleryActivity.this, PrintDialogActivity.class); 

Uri fileUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Long.toString(imageId)); 
Log.d(this, "File Uri:" + fileUri); 
printIntent.setDataAndType(fileUri, "image/*"); 
startActivity(printIntent); 

열린 전화를 사용하고 코드입니다 : // 미디어/외부/이미지/미디어/26,848

로그 캣 출력 할 때 나는 인쇄 버튼을

[INFO:CONSOLE(1)] "Uncaught TypeError: Object [object Object] has no method 'getType'", source: https://www.google.com/cloudprint/dialog.html (1) 
[INFO:CONSOLE(280)] "Uncaught TypeError: Cannot call method 'k' of null", source: https://www.google.com/cloudprint/client/442365700-dialog_mobile.js (280) 

편집입니다 키를 누릅니다 나 다른 장치의 몇 가지 테스트 봤는데, 위의 로그 출력을 얻을하지 않습니다, 그래서 관련이되지 않을 수 있습니다. 그러나 결과는 모든 장치에서 동일합니다. 내가 webview에서 인쇄 버튼을 누르면 아무 일도 일어나지 않습니다.

+0

어쩌면 이미지 대신/png 또는 jpg를 넣어야합니다./* –

답변

2

PrintDialogJavaScriptInterface 클래스의 메서드에 @JavascriptInterface를 추가합니다.

final class PrintDialogJavaScriptInterface { 

    @JavascriptInterface 
    public String getType() { 
     return cloudPrintIntent.getType(); 
    } 

    @JavascriptInterface 
    public String getTitle() { 
     return cloudPrintIntent.getExtras().getString("title"); 
    } 

    @JavascriptInterface 
    public String getContent() { 
     try { 
      ContentResolver contentResolver = getContentResolver(); 
      InputStream is = contentResolver.openInputStream(cloudPrintIntent.getData()); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

      byte[] buffer = new byte[4096]; 
      int n = is.read(buffer); 
      while (n >= 0) { 
       baos.write(buffer, 0, n); 
       n = is.read(buffer); 
      } 
      is.close(); 
      baos.flush(); 

      return Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return ""; 
    } 

    @JavascriptInterface 
    public String getEncoding() { 
     return CONTENT_TRANSFER_ENCODING; 
    } 

    @JavascriptInterface 
    public void onPostMessage(String message) { 
     if (message.startsWith(CLOSE_POST_MESSAGE_NAME)) { 
      finish(); 
     } 
    } 
} 
관련 문제