我需要截取一些屏幕截图,是否可以使用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 中的 0x04 处直接调用 0x0cf0;.onStartCommand 03-06 17:27:54.949:我/我的服务(1405):创建了仪器对象 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):致命异常:main
03-06 17:27:54.979:E/Android运行时(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(本机方法) 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 能够截屏,但它将仅包含应用程序的视图(例如状态栏将为空白)。您遇到了什么问题? “我还不太成功”什么也没说。
编辑: 看来,您的项目中没有包含 robotsium-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) {
}
}
}
}
}
如果想在项目中使用 Robotium 框架,还应该了解 Robotium 需要两件事:
您需要将这些详细信息添加到清单文件中(在检测标签中)
我们需要将这两个详细信息动态添加到屏幕截图记录器应用程序的清单中
这是不可能的,因为违背了清单文件的目的
这是一个坏主意,我们不能使用 Robotium 的“takeScreenShot”方法来拍摄屏幕截图。我建议使用 ASL Library,我仍在努力解决这个问题。