我在捕获未植根电话的屏幕时遇到了麻烦。
我在电脑上尝试过这个命令:
adb shell /system/bin/screencap -p /sdcard/out.png
这很有效。
但是,每当我尝试在我的应用程序中使用此命令时:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] str ={"/system/bin/screencap","-p","/sdcard/out.png"};
try {
Process ps = Runtime.getRuntime().exec(str);
try {
ps.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show(); }
}
我总是得到0个字节的out.png。我认为源代码没有错误,但我无法理解为什么会出现这种错误。
请帮我解决这个问题。
感谢。
答案 0 :(得分:6)
在logcat中搜索类似的东西
perrmission失败:来自uid的android.permission.READ_FRAME_BUFFER = 10113 pid = 2934 113 PermissionCache D检查android.permission.READ_FRAME_BUFFER for uid = 10113 =>否认(294我们) 113 SurfaceFlinger E Permission Denial:无法读取framebuffer pid = 2934,uid = 10113
如果您收到该错误,则表示权限问题。
即使您添加了READ_FRAME_BUFFER权限,它仍然无效。 通常,这意味着应用程序没有读取帧缓冲区的权限,必须使用系统证书进行编译或使用su获取root权限。