【问题标题】:Take Screenshot of Android screen and save to SD card截取 Android 屏幕截图并保存到 SD 卡
【发布时间】:2011-05-08 18:30:31
【问题描述】:

这里有几个关于捕获 android 应用程序屏幕截图的问题。但是,我还没有找到关于如何使用 android SDK 或任何其他方法以编程方式截取屏幕截图的可靠解决方案。

所以我想我会再次问这个问题,希望我能找到一个好的解决方案,希望能够捕捉到我可以保存到 SD 卡或类似位置的全长图像。

感谢任何帮助

【问题讨论】:

标签: java android screenshot sd-card


【解决方案1】:

这不可能直接在设备/模拟器上,除非它是根。

老实说,我只需要模拟器,因为这是用于 PC 上的测试应用程序

这听起来像是monkeyrunner 的工作。

【讨论】:

  • 出于好奇,您知道Android无法做到这一点的原因吗?这是 Android 开发者的政策决定,还是 Android 本身的某个限制?
  • @MisterSquonk:AFAIK,没有 API 是一个政策决定。为什么他们没有自己的操作系统提供的屏幕截图应用程序,我不能说。
  • 谢谢。并不是说我个人对它有用 - 我只是觉得它不是标准功能感到好奇。
  • 正如 MonkeyRunner 文档所解释的,很容易假设 MonkeyRunner 只是 Monkey 工具的运行器,在这种情况下,一个人(也就是我)可能会完全跳过 MonkeyRunner 文档。我建议在工具目录的条目中添加“与猴子无关”。
【解决方案2】:

monkeyrunner 工具可以通过一点 adb 命令为您完成这项工作,[python 脚本]

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
//waits for connection
device = MonkeyRunner.waitForConnection()
//take the current snapshot
device.takeSnapshot()
//stores the current snapshot in current dir in pc
device.writeToFile('current.png')\
//copy it to the sd card of device
os.subprocess.call('adb push current.png /sdcard/android/com.test.myapp/current.png')

注意:调用这个 jython 脚本文件
monkeyrunner.bat

【讨论】:

    【解决方案3】:

    您很可能对这个答案不满意,但我看到的唯一答案涉及使用本机代码或执行本机命令。

    编辑: 我以前没见过这个。你试过了吗?: http://code.google.com/p/android-screenshot-library/

    Edit2:检查了那个库,这也是一个糟糕的解决方案。要求您从 PC 启动服务。所以我最初的答案仍然成立:)

    Edit3:您应该能够通过执行类似的操作将视图另存为图像。您可能需要稍微调整一下,以便获得视图的宽度/高度。 (我正在膨胀布局,并在布局代码时指定宽度/高度)

    View content = getView();
    Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    File file = new File(pathAndFilename);              
    file.createNewFile();
    FileOutputStream ostream = new FileOutputStream(file);
    bitmap.compress(CompressFormat.PNG, 100, ostream);
    ostream.close();
    

    【讨论】:

    • 老实说,我所需要的只是模拟器,因为这是用于 PC 上的测试应用程序。我以前看过那个库,但我找不到将它从后台服务变成类的方法。如果我将它用作服务,它要求我每次重启后都需要启动它,这对我来说并不理想。
    • 您是说您有一个已创建的视图,并且您想对该视图进行屏幕截图吗?这并不难。
    • 这正是我要说的。如果我也能获得视图的全长(可滚动)那就太好了,但这可能是不可能的。
    • 查看我编辑的答案。我发布了一些你应该可以使用的代码。
    • 如果只是来自模拟器,为什么不直接使用eclipse中的截图按钮(Devices Perspective)
    【解决方案4】:

    您可以查看http://codaset.com/jens-riboe/droidatscreen/wiki(写在http://blog.ribomation.com/2010/01/droidscreen/):这是一个使用adb 捕获屏幕截图的Java 库。我已经能够(费了很多力气)修改源代码,让我可以自动捕捉一系列定时的屏幕截图(我用于演示视频)。

    你可以在http://pastebin.com/hX5rQsSR看到类结构

    编辑:您会像这样调用它(在捆绑所有要求之后):

    java -cp DroidScreen.jar --adb "" --device "" --prefix "" --interval

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多