移动设备上的程序化屏幕捕获

时间:2010-08-27 08:49:39

标签: android screenshot

我想为Android实现某种远程协助工具(如vnc)。是否有可能在设备上以编程方式捕获屏幕?

6 个答案:

答案 0 :(得分:17)

这样的事可能适合你:

View v = view.getRootView();
v.setDrawingCacheEnabled(true);
Bitmap b = v.getDrawingCache();

答案 1 :(得分:12)

android-developers上对此进行了长时间的讨论,但简短的回答是:您不能以编程方式截取Android设备的屏幕截图,除非

  1. 您拥有该手机的root权限,或
  2. 您的应用程序是系统应用程序
  3. Android Manifest权限 READ_FRAME_BUFFER 存在(请参阅api docs here),但目前只能由系统应用程序使用。这有多种原因,一个是安全风险。如果背景可以随时截取手机屏幕的截图,那么人们可以使用OCR技术在输入密码时嗅探用户的密码,以及其他私人信息。

    所以不,没有root,目前无法使用VNC应用程序。要从您的计算机上截取屏幕截图(通过USB插入手机),您可以使用DDMS

答案 2 :(得分:7)

您可以尝试以下库: http://code.google.com/p/android-screenshot-library/ Android截图库(ASL)支持以编程方式从Android设备捕获屏幕截图,而无需具有root访问权限。相反,ASL利用在后台运行的本机服务,每次设备启动时通过Android调试桥(ADB)启动。

答案 3 :(得分:3)

我认为在kitkat中使用adb命令进行屏幕捕获是可能的。 您可以使用此命令将屏幕录制为视频

adb shell screenrecord /sdcard/demo.mp4

您可以找到更多详情here

您可以从应用中执行adb命令。 检查答案here

答案 4 :(得分:1)

把它放在onClick ..

Bitmap bitmap = takeScreenshot();
saveBitmap(bitmap);

并写函数..

public Bitmap takeScreenshot() {
   View rootView = findViewById(android.R.id.content).getRootView();
   rootView.setDrawingCacheEnabled(true);
   return rootView.getDrawingCache();
}

public void saveBitmap(Bitmap bitmap) {
    File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png");
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(imagePath);
        bitmap.compress(CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
}

答案 5 :(得分:0)

对于“SOME”Android设备(主要是三星),确实存在VNC类型的遥控器:
TeamViewer QuickSupport
https://play.google.com/store/apps/details?id=com.teamviewer.quicksupport.market
任何人都知道该工具如何获取屏幕截图,以及为什么它只支持有限的一组设备?