【问题标题】:Can I use robotium's take 'snapshot' method in an android Proj. If so any suggestions to how?我可以在android Proj 中使用robotium 的“快照”方法吗?如果是这样,有什么建议吗?
【发布时间】:2013-02-20 20:42:17
【问题描述】:

我需要截屏,是否可以使用 Robotium 中已有的“takeScreenShot”方法截屏?我已经导入了jar文件,但我并没有太成功。 如果无法使用robotium,您能否提出任何其他解决方案。

public class MyService extends Service {
    Solo solo;
    Context con;
    private Instrumentation it;
    @Override
public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();

        it = new Instrumentation();
        Log.i("My Service", "Instrumentation Obj was created");

    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub

        solo = new Solo(it);
        if(solo == null)
        Log.i("My Service", "Solo Obj was created");
        solo.takeScreenshot();
        return super.onStartCommand(intent, flags, startId);
    }

原木猫 O/P: 03-06 17:27:54.939: W/dalvikvm(1405): VFY: 无法解析 Lcom/example/unboundserviceex/MyService 中的新实例 468 (Lcom/jayway/android/robotium/solo/Solo;); 03-06 17:27:54.949: D/dalvikvm(1405): VFY: 在 0x0000 处替换操作码 0x22 03-06 17:27:54.949: D/dalvikvm(1405): DexOpt: 无法在 Lcom/example/unboundserviceex/MyService;.onStartCommand 的 0x04 处选择直接调用 0x0cf0 03-06 17:27:54.949: I/My Service (1405): Instrumentation Obj 已创建 03-06 17:27:54.959: D/AndroidRuntime(1405): 关闭 VM 03-06 17:27:54.959: W/dalvikvm(1405): threadid=1: 线程以未捕获的异常退出 (group=0x409c01f8) 03-06 17:27:54.979:E/AndroidRuntime(1405):致命异常:主要

03-06 17:27:54.979: E/AndroidRuntime(1405): java.lang.NoClassDefFoundError:

com.jayway.android.robotium.solo.Solo 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 com.example.unboundserviceex.MyService.onStartCommand(MyService.java:33) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2359) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 android.app.ActivityThread.access$1900(ActivityThread.java:123) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 android.os.Handler.dispatchMessage(Handler.java:99) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 android.os.Looper.loop(Looper.java:137) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 android.app.ActivityThread.main(ActivityThread.java:4424) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 java.lang.reflect.Method.invokeNative(Native Method) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 java.lang.reflect.Method.invoke(Method.java:511) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 03-06 17:27:54.979: E/AndroidRuntime(1405): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 03-06 17:27:54.979: E/AndroidRuntime(1405): at dalvik.system.NativeStart.main(Native Method)

我认为的主要错误是:java.lang.NoClassDefFoundError

【问题讨论】:

    标签: android robotium


    【解决方案1】:

    如果想在他们的项目中使用 Robotium 框架,还应该了解 Robotium 需要两件事:

    1. 活动
    2. 包名

    下一步,您需要将这些详细信息添加到清单文件中(在检测标记中)

    现在继续上面的细节。

    我们需要将这两个细节动态添加到屏幕截图记录器应用程序的清单中

    这是不可能的,因为违背了清单文件的目的

    基本上我是说这是一个坏主意,我们不能使用 Robotium 的“takeScreenShot”方法来拍摄屏幕截图。我建议使用ASL Library,我仍然无法使用它。感谢您的宝贵时间,我很抱歉浪费了其他人。

    【讨论】:

      【解决方案2】:

      Robotium 能够截屏,但它只会包含您的应用程序的视图(例如,状态栏将是空白的)。你遇到了什么问题? “我还没有太成功”什么也没说。

      编辑: 看来,您的项目中没有包含 robots-solo jar。

      无论如何,如果你只需要它来截图,你根本不需要它,只需使用这段代码,但正如我之前写的,你需要任何视图来获取它(以及在外部存储上写入的权限)

      protected void takeScreenshot(String name, View v) {
          View view = v.getRootView();
          view.setDrawingCacheEnabled(true);
          view.buildDrawingCache();
          Bitmap bmp = view.getDrawingCache();
          if (bmp != null) {
              String path = String.format("%s/%s/",
                  Environment.getExternalStorageDirectory(),
                  "scrrenshots");
      
              File dir = new File(path);
              if (!dir.exists()) {
                  dir.mkdirs();
              }
      
              FileOutputStream fos = null;
              try {
                  fos = new FileOutputStream(String.format(
                          "%s%s.png", path, name));
                  bmp.compress(Bitmap.CompressFormat.PNG, 90, fos);
              } catch (IOException e) {
              } finally {
                  if (view != null) {
                      view.destroyDrawingCache();
                  }
                  if (fos != null) {
                      try {
                          fos.close();
                      } catch (IOException e) {
                      }
                  }
              }
          } 
      }
      

      【讨论】:

      • 我已经编辑了我的原始帖子。请让我知道您还需要什么。
      • 我正在尝试在后台运行屏幕截图过程,以便我可以截取其他应用程序的屏幕截图。但我认为这是不可能的。
      猜你喜欢
      • 1970-01-01
      • 2011-03-29
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 2011-01-21
      • 1970-01-01
      相关资源
      最近更新 更多