我可以使用robotium';让我们来看看';快照';方法在android项目中。如果有的话,有什么建议吗?

我可以使用robotium';让我们来看看';快照';方法在android项目中。如果有的话,有什么建议吗?,android,robotium,Android,Robotium,我需要拍摄一些屏幕截图,是否可以使用Robotium中已有的“拍摄屏幕截图”方法拍摄屏幕截图?我已经导入了jar文件,但还不是很成功。 如果无法使用robotium,您能否建议其他解决方案 public class MyService extends Service { Solo solo; Context con; private Instrumentation it; @Override public void onCreate() { //

我需要拍摄一些屏幕截图,是否可以使用Robotium中已有的“拍摄屏幕截图”方法拍摄屏幕截图?我已经导入了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);
    }
记录cat 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;中的0x04选择直接调用0x0cf0;。启动命令 03-06 17:27:54.949:I/My Service(1405):创建了仪器Obj 03-06 17:27:54.959:D/AndroidRuntime(1405):关闭虚拟机 03-06 17:27:54.959:W/dalvikvm(1405):threadid=1:线程退出时出现未捕获异常(组=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.Invokenactive(本机方法) 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):在dalvik.system.NativeStart.main(本机方法)


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

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

编辑: 看起来,您的项目中没有包含robotium solo jar

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


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

  • 活动
  • 包名
  • 下一步,您需要将这些详细信息添加到清单文件(在instrumentation标记中)

    现在请继续关注上述细节。

    我们需要将这两个细节动态地添加到ScreenshotRecorder应用程序的清单中,这是不可能的,因为它违背了清单文件的目的


    本质上,我是说这是一个坏主意,我们不能使用Robotium的“截屏”方法来截屏。我建议使用,但我仍然无法使用。感谢您抽出时间,并为浪费他人表示歉意。

    我已编辑了我的原始帖子。请告诉我您还需要什么。我正在尝试在后台运行屏幕截图过程,以便可以拍摄其他应用程序的屏幕截图。但我认为这是不可能的。
    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) {
                    }
                }
            }
        } 
    }