【发布时间】:2014-03-24 07:12:49
【问题描述】:
嗨,在我的应用程序中,我想打印出我的 webview 页面,即 html 页面。谁能告诉我我做错了什么。我的问题是代码在 emultor 中运行,而不是在任何其他设备中。
MainActivity.java:
package com.example.print1;
import android.os.Build;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;
import android.print.PrintManager;
import android.content.Context;
@SuppressLint("NewApi")
public class MainActivity extends Activity {
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_print);
WebView webView = new WebView(this);
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view,
String url)
{
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
createWebPrintJob(view);
myWebView = null;
}
});
String htmlDocument =
"<html><body><h1>Android Print Test</h1><p>"
+ "This is some sample content.</p></body></html>";
webView.loadDataWithBaseURL(null, htmlDocument,
"text/HTML", "UTF-8", null);
myWebView = webView;
}
@TargetApi(19)
@SuppressLint("NewApi")
private void createWebPrintJob(WebView webView) {
PrintManager printManager = (PrintManager) this.getSystemService(Context.PRINT_SERVICE);
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();
String jobName = getString(R.string.app_name) + " Print Test";
printManager.print(jobName, printAdapter,new PrintAttributes.Builder().build());
}
}
WebPrintActivity.java
package com.example.print1;
import android.os.Bundle;
import android.print.PrintAttributes;
import android.print.PrintDocumentAdapter;
import android.print.PrintManager;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
public class WebPrintActivity extends Activity {
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webView1);
myWebView.loadUrl("http://developer.android.com/google/index.html");
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_print:
createWebPrintJob(myWebView);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void createWebPrintJob(WebView webView) {
PrintManager printManager = (PrintManager) this
.getSystemService(Context.PRINT_SERVICE);
PrintDocumentAdapter printAdapter =
webView.createPrintDocumentAdapter();
String jobName = getString(R.string.app_name) +
" Print Test";
printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
}
}
上面的代码在模拟器中运行,但模拟器中没有wifi,如果相同的代码在android设备中运行意味着它显示错误并且它没有显示正确的输出,我也想从android中获取打印输出。 谢谢。
【问题讨论】:
-
如果有人知道如何打印多份,请告诉我同样的,因为在这段代码中我们只能打印一份,但我必须打印两份。所以如果有人知道,请建议我。