Java 无法使用代码记录屏幕
因此,我正在开发一个应用程序,将记录设备屏幕。 我正在使用Java 无法使用代码记录屏幕,java,android,layout,Java,Android,Layout,因此,我正在开发一个应用程序,将记录设备屏幕。 我正在使用Runtime.getRuntime执行命令 所以我发现你可以使用adb shell screenrecord--比特率8000000--time limit 15/sdcard/demovideo.mp4通过adb记录你的设备屏幕,所以我这样做了 public class MainActivity extends Activity { @Override protected void onCreate(Bundle s
Runtime.getRuntime
执行命令
所以我发现你可以使用adb shell screenrecord--比特率8000000--time limit 15/sdcard/demovideo.mp4通过adb记录你的设备屏幕,所以我这样做了
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageButton time_launch = (ImageButton) findViewById(R.id.r_1);
time_launch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Process process = null;
try {
process = Runtime.getRuntime().exec("screenrecord --bit-rate 8000000 --time-limit 5 /sdcard/video.mp4");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
}
});
}
}
但遗憾的是,当我按下按钮时,什么也没有发生,视频根本没有录制。我试着在互联网上四处寻找,但没有任何帮助。希望你们中的一位能够帮助我。在screen record命令之前尝试运行“su”命令,看看它是否有效。如下所示:
@Override
public void onClick(View v) {
Process process = null;
try {
Runtime.getRuntime().exec("su");
process = Runtime.getRuntime().exec("screenrecord --bit-rate 8000000 --time-limit 5 /sdcard/video.mp4");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
}
});
我在使用比特率选项时发现了一些问题..尝试在不使用比特率参数的情况下运行命令,只需给出路径参数process=Runtime.getRuntime().exec(“screenrecord/sdcard/video.mp4”)代码>
还可以将写入外部存储权限添加到应用程序清单中
这在非根设备上不起作用
您还可以尝试以下操作:
使用反射从PhoneWindowManager.java调用takeScreenshot()
参考下面的代码,了解如何使用反射调用隐藏的API\
对PhoneWindowManger执行类似的操作
TelephonyManager telephony = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Log.v(TAG, "Get getTeleService...");
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(telephony);
telephonyService.silenceRinger();
Log.v(TAG, "Answering Call now...");
telephonyService.answerRingingCall();
Log.v(TAG, "Call answered...");
//telephonyService.endCall();
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG,
"FATAL ERROR: could not connect to telephony subsystem");
Log.e(TAG, "Exception object: " + e);
}
你应该拥有root访问权限&Android 4.4+来录制。将su添加到命令行后,仍然没有发生任何事情。事实上,在安全模型保持不变的设备上,这是不允许的。因此,不可能通过应用程序来执行此操作?或者我需要另一种方法吗?打电话给苏后,我尝试了你答案的第一部分。您将看到一个弹出窗口,请求权限。但在那之后。(5秒)。它没有记录任何东西?我只是想知道其他应用程序是如何实现这一点的?@robin我在使用比特率选项时发现了一些问题。.尝试在不使用比特率参数的情况下运行命令,只需给出路径参数`process=Runtime.getRuntime().exec(“screenrecord/sdcard/video.mp4”);还要确保您提供的文件路径正确。让我们知道这是否有效。另外,在应用程序清单中添加“写入外部存储”权限。它可以工作,我进入SD卡,它显示video.mp4,但文件大小为00.00kb,无法播放。我还运行了这个代码进程=Runtime.getRuntime().exec(“screenrecord--time limit 15/sdcard/video.mp4”);因为我不知道如何停止录制,所以我添加了一个时间限制来停止录制,您可以在特定的时间间隔后模拟Ctrl+C。要执行此操作,请参考-如果它现在工作…@Robin还检查从命令提示符运行screen record是否工作..只是为了确定设备是否有问题。。