2

クラウド プリント Web サイトのチュートリアルに従い、サンプル コードをコピー アンド ペーストして Print アクティビティを作成しました。

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);

ログに記録される Uri は content://media/external/images/media/26848 のようになります

印刷ボタンを押したときのLogcat出力は

[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 で印刷ボタンを押しても何も起こりません。

4

1 に答える 1

4

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();
        }
    }
}
于 2015-08-12T02:26:19.370 に答える