Android编程中的屏幕录像机,不是屏幕截图

Soh*_*med 1 android android-intent android-layout android-fragments android-activity

我想让应用程序像"EASY screen recorder".我必须从哪里开始,因为我搜索了很多但没有任何链接我已经找到了开始.有任何api用于创建屏幕录像机而不是屏幕截图.我不想使用javacv从屏幕截图创建视频.我只是希望用户启动应用程序,然后单击开始录制按钮以及用户在移动记录上执行的操作.

1)在android中是否有任何API.

2)如何在android中创建屏幕录像机应用程序.

3)在Android中没有任何api然后请参考我的其他api所以我可以在android中使用.

我搜索了很多但仍无法创建录制应用程序.我有Android应用程序,其中我添加代码,使用处理程序的屏幕截图在特定时间后,它使用javacv创建视频,但我不喜欢因为为此我必须在每个应用程序中编写代码,并采取当前活动的屏幕截图,最后创建视频.

EASY屏幕录像机开发者如何创建这个应用程序?他们使用哪种api.我想创建这个应用程序的克隆.

Muh*_*que 5

对不起,迟到的答案,但这是一个有效的代码.它将在Lollipop上面工作

    private VirtualDisplay mVirtualDisplay;
    private MediaRecorder mMediaRecorder;
    private MediaProjection mMediaProjection;
    private MediaProjectionCallback callback;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MediaProjectionManager projectionManager = (MediaProjectionManager) 
        context.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
        mMediaProjection.registerCallback(callback, null);
        initRecorder();
        mMediaRecorder.prepare();
        mVirtualDisplay = createVirtualDisplay();
        mMediaRecorder.start();
}

public void initRecorder() {
        path = "/sdcard/Record/video" + ".mp4";
        recId = "capture-" + System.currentTimeMillis() + ".mp4";
        File myDirectory = new File(Environment.getExternalStorageDirectory(), "Record");

            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
            mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            mMediaRecorder.setVideoEncodingBitRate(MainFragment.bitRate);          
            mMediaRecorder.setVideoFrameRate(30);
            mMediaRecorder.setVideoSize(MainFragment.DISPLAY_WIDTH,
            MainFragment.DISPLAY_HEIGHT);
            mMediaRecorder.setOutputFile(path);
    }


    private VirtualDisplay createVirtualDisplay() {
        return mMediaProjection.createVirtualDisplay("MainActivity",
                MainFragment.DISPLAY_WIDTH, MainFragment.DISPLAY_HEIGHT, MainFragment.screenDensity,
                DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                mMediaRecorder.getSurface(), null /*Callbacks*/, null /*Handler*/);
    }

public class MediaProjectionCallback extends MediaProjection.Callback {
        @Override
        public void onStop() {
            mMediaRecorder.stop();
            // mMediaRecorder.reset();
            mMediaRecorder.release();
            mMediaProjection.unregisterCallback(callback);
            mMediaProjection = null;
            mMediaRecorder = null;
        }
Run Code Online (Sandbox Code Playgroud)