所以我正在开发一个记录设备屏幕的应用程序。
我正在使用Runtime.getRuntime
来执行命令。
所以我发现你可以使用adb shell screenrecord --bit-rate 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()));
}
});
}
}
但遗憾的是,当我按下按钮时,没有任何事情发生,视频根本没有录制。我尝试在互联网上四处寻找,但没有任何帮助。希望你们其中一个人可以帮助我。
答案 0 :(得分:0)
尝试在屏幕录制命令之前运行“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");
...
还要为您的应用清单添加WRITE_EXTERNAL_STORAGE权限。
这不适用于非root设备。
您还可以尝试以下操作:
使用反射从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);
}