Search code examples
androidandroid-activityandroid-serviceandroid-viewandroid-screen-support

Get screenshot of current foreground app on Android having root priviliges


I'm developing an application that is installed on the system partition and I would like to know if it's possible to get a screenshot of the current foreground application from a service. Of course, the application being any third party app.

I'm not interested in security issues or anything related to that matter. I only want to get a snapshot of the current foreground third party app.

Note: I'm aware of the /system/bin/screencap solution but I'm looking for a more elegant alternative that does everything programmatically.


Solution

  • Months have passed since I asked this question but just now had the time to add this feature. The way to do this is simply by calling screencap -p <file_name_absolute_path> and then grabbing the file. Next is the code I used:

    private class WorkerTask extends AsyncTask<String, String, File> {
        @Override
        protected File doInBackground(String... params) {
            File screenshotFile = new File(Environment.getExternalStorageDirectory().getPath(), SCREENSHOT_FILE_NAME);
            try {
                Process screencap = Runtime.getRuntime().exec("screencap -p " + screenshotFile.getAbsolutePath());
                screencap.waitFor();
                return screenshotFile;
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } catch (InterruptedException ie) {
                ie.printStackTrace();
            }
    
            return null;
        }
    
        @Override
        protected void onPostExecute(File screenshot_file) {
            // Do something with the file.
        }
    }
    

    Remember to add the <uses-permission android:name="android.permission.READ_FRAME_BUFFER" /> permission to the manifest. Otherwise screenshot.png will be blank.

    This is much simpler than what Goran stated and is what I finally used.

    Note: It only worked for me when the app is installed on the system partition.