移动设备上的程序性屏幕截图

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

像这样的东西可能适合你:

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

关于android开发者有一个很长的讨论,但是简短的回答是:你不能以编程的方式截取android设备的屏幕截图,除非

  1. 您可以在该手机上进行root访问,或者
  2. 你的应用是一个系统应用

Android Manifest权限READ_FRAME_BUFFER存在(请参阅此处的api文档),但目前只能由系统应用程序使用。 这有多种原因,其中一个是安全风险。 如果背景随时可以截取手机的屏幕截图,那么人们可以使用OCR技术来嗅探用户input的密码以及其他私人信息。

所以不行,VNC应用程序在没有root的情况下是不可能的。 要从电脑截图(而通过USB插入电话),您可以使用DDMS 。

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

我认为它可能在kitkat中使用adb命令进行屏幕截图。 您可以使用此命令将屏幕录制为video

 adb shell screenrecord /sdcard/demo.mp4 

你可以在这里find更多的细节

你可以从你的应用程序执行adb命令。 在这里检查答案

把它放在onClick ..

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

写funtcion ..

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

VNCtypes的遥控器确实存在“一些”Android设备(主要是三星):
TeamViewer QuickSupport
https://play.google.com/store/apps/details?id=com.teamviewer.quicksupport.market
有谁知道这个工具如何获取屏幕捕获,以及为什么它只支持有限的设备?