I am getting an error "java.lang.IllegalStateException: Can print only from an activity" while using an android 4.4 printing API.
is 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 any example of android wifi printing?
I know this is late answer.
You have to use YourCurrentActivity.this instead of getApplicationContext()
Because  getApplicationContext() refers to an whole application context while YourCurrentActivity.this refers only current activity context.
My application is using PDF printing using PrintManager. I got this issue after I implemented Multi-language support.
Android create a new context via createConfigurationContext(). This invalidates the reference being used by the PrintManager instance, causing the above IllegalStateException.
Solution
My solution is to store a reference of the original context passed by attachBaseContext()  a member of my activity. 
Then retrieve PrintManager instance by calling getSystemService() on the original context reference instead of the inactive context reference. 
private Context originalContext;
@Override
protected void attachBaseContext(Context newBase) {
    this.originalContext = newBase;
    super.attachBaseContext(LocaleHelper.onAttach(newBase,appLocale));
}
//  Starting printing (PDF generation):
PrintManager printManager = (PrintManager) originalContext.getSystemService(Context.PRINT_SERVICE);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With