Java – received error “java.lang.IllegalStateException: Can print only from an activity”?

received error “java.lang.IllegalStateException: Can print only from an activity”?… here is a solution to the problem.

received error “java.lang.IllegalStateException: Can print only from an activity”?

I’m getting the error “java.lang.IllegalStateException: Can only print from an activity” when using the android 4.4 print API.

Does it work on all Android above 4.4?

My code

public class MainActivity extends Activity {

Context cotext;
    WebView mWebView;

    protected void onCreate(Bundle savedInstanceState) {

cotext = getApplicationContext();

public void printData(View view){

private void doWebViewPrint() {
         Create a WebView object specifically for printing
        WebView webView = new WebView(cotext);
        webView.setWebViewClient(new WebViewClient() {

public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;

            public void onPageFinished(WebView view, String url) {
                Log.i("TAG", "page finished loading " + url);
                mWebView = null;

 Generate an HTML document on the fly:
        String htmlDocument = "<html><body><h1>Test Content</h1><p>Testing, " +
                "testing, testing... </p></body></html>";
        webView.loadDataWithBaseURL(null, htmlDocument, "text/HTML", "UTF-8", null);

 Keep a reference to WebView object until you pass the PrintDocumentAdapter
         to the PrintManager
        mWebView = webView;

private void createWebPrintJob(WebView webView) {

 Get a PrintManager instance
        PrintManager printManager = (PrintManager) cotext

 Get a print adapter instance
        PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();

 Create a print job with name and adapter instance
        String jobName = getString(R.string.app_name) + " Document";
        printManager.print(jobName, printAdapter,
                new PrintAttributes.Builder().build());

 Save the job object for later status checking

Please help me.

Is there an example of Android wifi printing?


I know it’s a belated answer.

You must use YourCurrentActivity.this instead of getApplicationContext().

Because getApplicationContext() references the entire application context, YourCurrentActivity.this refers only to the current activity context.

Related Problems and Solutions