diff --git a/mobly/controllers/android_device.py b/mobly/controllers/android_device.py
index 7557ae2..2a38e0e 100644
--- a/mobly/controllers/android_device.py
+++ b/mobly/controllers/android_device.py
@@ -77,6 +77,9 @@
 # Default Timeout to wait for boot completion
 DEFAULT_TIMEOUT_BOOT_COMPLETION_SECOND = 15 * 60
 
+# Timeout for the adb command for taking a screenshot
+TAKE_SCREENSHOT_TIMEOUT_SECOND = 10
+
 # Aliases of error types for backward compatibility.
 Error = errors.Error
 DeviceError = errors.DeviceError
@@ -1002,6 +1005,26 @@
         self.log.debug('Bugreport taken at %s.', full_out_path)
         return full_out_path
 
+    def take_screenshot(self, path):
+        """Takes a screenshot of the device.
+
+        Args:
+            path: string, full path to the directory to save in.
+
+        Returns:
+            string, full path to the screenshot file on the host.
+        """
+        filename = self.generate_filename('screenshot', extension_name='png')
+        device_path = os.path.join('/storage/emulated/0/', filename)
+        self.adb.shell(['screencap', '-p', device_path],
+                       timeout=TAKE_SCREENSHOT_TIMEOUT_SECOND)
+        utils.create_dir(path)
+        self.adb.pull([device_path, path])
+        pic_path = os.path.join(path, filename)
+        self.log.debug('Screenshot taken, saved on the host: %s', pic_path)
+        self.adb.shell(['rm', device_path])
+        return pic_path
+
     def run_iperf_client(self, server_host, extra_args=''):
         """Start iperf client on the device.
 
diff --git a/tests/mobly/controllers/android_device_test.py b/tests/mobly/controllers/android_device_test.py
index 22aa17c..4cd86c9 100755
--- a/tests/mobly/controllers/android_device_test.py
+++ b/tests/mobly/controllers/android_device_test.py
@@ -799,6 +799,21 @@
 
     @mock.patch('mobly.controllers.android_device_lib.adb.AdbProxy',
                 return_value=mock_android_device.MockAdbProxy('1'))
+    @mock.patch('mobly.utils.create_dir')
+    @mock.patch('mobly.logger.get_log_file_timestamp')
+    def test_AndroidDevice_take_screenshot(self, get_log_file_timestamp_mock,
+                                           create_dir_mock, MockAdbProxy):
+        get_log_file_timestamp_mock.return_value = '07-22-2019_17-53-34-450'
+        mock_serial = '1'
+        ad = android_device.AndroidDevice(serial=mock_serial)
+        full_pic_path = ad.take_screenshot(self.tmp_dir)
+        self.assertEqual(
+            full_pic_path,
+            os.path.join(self.tmp_dir,
+                         'screenshot,1,fakemodel,07-22-2019_17-53-34-450.png'))
+
+    @mock.patch('mobly.controllers.android_device_lib.adb.AdbProxy',
+                return_value=mock_android_device.MockAdbProxy('1'))
     @mock.patch('mobly.controllers.android_device_lib.fastboot.FastbootProxy',
                 return_value=mock_android_device.MockFastbootProxy('1'))
     @mock.patch('mobly.utils.start_standing_subprocess',
@@ -1099,8 +1114,8 @@
     @mock.patch.object(logcat.Logcat, '_open_logcat_file')
     def test_AndroidDevice_handle_usb_disconnect(self, open_logcat_mock,
                                                  stop_proc_mock,
-                                                 start_proc_mock, FastbootProxy,
-                                                 MockAdbProxy):
+                                                 start_proc_mock,
+                                                 FastbootProxy, MockAdbProxy):
         class MockService(base_service.BaseService):
             def __init__(self, device, configs=None):
                 self._alive = False
@@ -1143,9 +1158,9 @@
                 return_value='process')
     @mock.patch('mobly.utils.stop_standing_subprocess')
     @mock.patch.object(logcat.Logcat, '_open_logcat_file')
-    def test_AndroidDevice_handle_reboot(self, open_logcat_mock, stop_proc_mock,
-                                         start_proc_mock, FastbootProxy,
-                                         MockAdbProxy):
+    def test_AndroidDevice_handle_reboot(self, open_logcat_mock,
+                                         stop_proc_mock, start_proc_mock,
+                                         FastbootProxy, MockAdbProxy):
         class MockService(base_service.BaseService):
             def __init__(self, device, configs=None):
                 self._alive = False
