我可以使用robotium';让我们来看看';快照';方法在android项目中。如果有的话,有什么建议吗?
我需要拍摄一些屏幕截图,是否可以使用Robotium中已有的“拍摄屏幕截图”方法拍摄屏幕截图?我已经导入了jar文件,但还不是很成功。 如果无法使用robotium,您能否建议其他解决方案我可以使用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() { //
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.NoClassDefFoundErrorRobotium能够截图,但它只包含应用程序的视图(例如,状态栏将为空)。你遇到了什么问题?“我不是很成功”什么也没说 编辑: 看起来,您的项目中没有包含robotium solo jar 无论如何,如果你只需要截图,你根本不需要它,只要使用这段代码,但正如我之前写的,你需要任何视图来截图(以及在外部存储上写的权限)
如果想在项目中使用Robotium框架,还应了解Robotium需要两件事:
现在请继续关注上述细节。
我们需要将这两个细节动态地添加到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) {
}
}
}
}
}