Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用代码记录屏幕_Java_Android_Layout - Fatal编程技术网

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是否工作..只是为了确定设备是否有问题。。