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;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

cotext = getApplicationContext();
    }

public void printData(View view){
        doWebViewPrint();
    }

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

@Override
            public void onPageFinished(WebView view, String url) {
                Log.i("TAG", "page finished loading " + url);
                createWebPrintJob(view);
                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
                .getSystemService(Context.PRINT_SERVICE);

 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
        mPrintJobs.add(printJob);
    }
}

Please help me.

Is there an example of Android wifi printing?

Solution

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