【发布时间】:2010-08-27 08:49:39
【问题描述】:
我想为 Android 实现某种远程协助工具(如 vnc)。是否可以在设备上以编程方式捕获屏幕?
【问题讨论】:
标签: android screenshot
我想为 Android 实现某种远程协助工具(如 vnc)。是否可以在设备上以编程方式捕获屏幕?
【问题讨论】:
标签: android screenshot
类似的东西可能对你有用:
View v = view.getRootView();
v.setDrawingCacheEnabled(true);
Bitmap b = v.getDrawingCache();
【讨论】:
android-developers 对此进行了长时间的讨论,但简短的回答是:目前您无法以编程方式截取 Android 设备的屏幕截图,除非
Android Manifest 权限 READ_FRAME_BUFFER 存在(请参阅 api 文档here),但目前只能由系统应用程序使用。造成这种情况的原因有很多,其中之一是它存在安全风险。如果后台可以随时截取手机屏幕的屏幕截图,那么人们可以使用 OCR 技术在用户输入密码时嗅探用户的密码以及其他私人信息。
所以不,目前没有 root 用户无法使用 VNC 应用程序。要从您的计算机截取屏幕截图(当手机通过 USB 插入时),您可以使用DDMS。
【讨论】:
您可以尝试以下库: http://code.google.com/p/android-screenshot-library/ Android 屏幕截图库 (ASL) 能够以编程方式从 Android 设备捕获屏幕截图,而无需拥有 root 访问权限。相反,ASL 使用在后台运行的本机服务,每次设备启动时通过 Android 调试桥 (ADB) 启动一次。
【讨论】:
【讨论】:
把它放在 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);
}
}
【讨论】:
“某些”android 设备(主要是三星)确实存在 VNC 类型的远程 tol:
TeamViewer 快速支持
https://play.google.com/store/apps/details?id=com.teamviewer.quicksupport.market
有谁知道该工具如何获取屏幕捕获,以及为什么它只支持有限的设备集?
【讨论】: