我正在我的应用程序中使用来自安卓的屏幕录制 api。
因此,我读了几篇很好的帖子
在有根的Nexus 5(Android 5.1)上,下面的代码可以正常工作。这意味着屏幕录制被触发,视频被成功保存到SD卡。
在有根的三星S6 Edge(Android 5.0.2)上,代码将卡在readLine()的第一次调用处。mp4文件已创建,可以在SD卡上找到,但它是空的。
权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
这是我的代码:
try {
Process process = Runtime.getRuntime().exec("su");
OutputStream stdin = process.getOutputStream();
InputStream stderr = process.getErrorStream();
InputStream stdout = process.getInputStream();
stdin.write(("/system/bin/screenrecord --time-limit 10 /sdcard/recording.mp4n").getBytes());
stdin.write("exitn".getBytes());
stdin.flush(); //flush stream
stdin.close(); //close stream
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while ((line = br.readLine()) != null) {
Log.i("Response: ", line);
mResults.append(line);
}
br.close();
br = new BufferedReader(new InputStreamReader(stderr));
while ((line = br.readLine()) != null) {
Log.e("Error: ", line);
mErrors.append(line);
}
br.close();
} catch(IOException ioe) {
Log.e(TAG, "IOException: " + ioe.toString());
}
所以我在网上搜索了一下,发现这可能是没有什么可读的问题。我在shell命令中添加了"&&echo done",但仍然没有变化。
我检查了几次日志,发现其中有两行带有 KNOX:
I/libpersona:KNOX_SDCARD检查 10202
I/libpersona:KNOX_SDCARD not a persona
我想也许 KNOX 会阻止我的应用程序写入 SD 卡。所以我从设备中删除了 KNOX,但仍然出现了同样的问题。
我需要让此代码在此特定的三星设备上运行。希望你们中的一些人知道如何运行代码。
谢谢丹尼尔
我还没有找到所描述的特定问题的解决方案。但我偶然发现了另一个 API,它帮助我实现了我的目标并记录了 android 设备的屏幕。
在MediaRecorder和VirtualDisplay的帮助下,我能够将屏幕捕获成mp4文件到SD卡上。