안드로이드 화면 캡쳐 예제 소스

다음은 Android 미디어 프로젝션 API를 사용하여 화면 녹화가 수행되는 주요 활동을 살펴보겠습니다. 비디오 Android SDK와 함께 제공되는 ScreenCapturer 클래스는 장치 화면에서 LocalVideoTrack용 비디오 프레임을 제공하는 데 사용됩니다. 프레임은 MediaProjection API를 통해 제공됩니다. 이 캡처기는 Build.VERSION_CODES와만 호환됩니다. 롤리팝 이상. Android MediaProjection 클래스와 MediaRecording 클래스가 모두 상호 작용하는 장소는 createVirtualDisplay 메서드를 사용하여 가상 디스플레이를 만들 때입니다. 이 메서드는 기본적으로 화면 내용이 Surface에 버퍼링되는 가상 디스플레이를 만듭니다. MediaRecorder에서 화면 내용을 캡처하기 위해 MediaRecorder.VideoSource.SURFACE 매개 변수를 사용하여 비디오 소스로 위의 미디어 레코더를 초기화했습니다. 그런 다음 createVirtualDisplay 메서드에서 mMediaRecorder.getSurface() 메서드를 사용하여 미디어 레코더의 표면을 지정했습니다. 이렇게함으로써 나는 화면 캡처 비디오 녹화 파일이 생성되는 미디어 프로젝션 클래스에서 미디어 레코더에 실시간으로 입력을 주었다. 희망이 도움이 됩니다. 페이스 북, 트위터, 구글 +에 우리와 함께 연결합니다.

업데이트 된 코드로 다시 한 번 시도하십시오. 나는 안드로이드 M. 안드로이드 화면 캡처에 대한 권한 검사를 추가 – 안드로이드 개발자의 관찰에 따라 github :) 안드로이드 SDK는 표준에서 특정 보기의 비트맵 표현을 얻을 수있는 가능성을 제공합니다. 따라서 화면에서 사용자에게 표시되는 콘텐츠의 스크린샷을 찍려면 현재 활동의 루트 보기를 가져온 다음 해당 Bitmap을 만드는 것이 주요 아이디어입니다. 우리의 스크린 샷 안드로이드 응용 프로그램을 테스트하려면, 우리는 단지 응용 프로그램을 실행하고 버튼을 클릭해야합니다. 당신은 다음과 같은 결과를 가져야한다 : 안드로이드 미디어 프로젝션 API는 장치의 화면을 기록하고 캡처의 문제를 해결하지만, 그것은 안드로이드의 롤리팝 버전에 도입 된 이후 지금으로 는 21보다 낮은 API 버전에서 사용할 수 없습니다. 스크린캡처프로세서가 목록에 추가되지 않으면 Process()가 호출될 때 BasicScreenCaptureProcessor가 사용됩니다. 미디어 프로젝션을 시작하려면 MediaProjection 의 인스턴스를 얻어야 합니다. 이를 위해 mediaprojectionManager.createScreenCaptureIntent()의 의도로 startActivityForResult를 호출해야 합니다.

사용자에게 확인 대화 상자가 표시됩니다. 사용자가 확인하면 onActivityResult에서 결과 코드와 데이터를 받게 되므로 getMediaProjection를 전달합니다. 미디어레코더에서 오디오를 설정하는 데 문제가 있습니다(setAudioSource가 실패했습니다.). 나는 오디오 코드를 주석, 하지만 지금은 토글 버튼을 누르면 충돌. 사용 전화 : 안드로이드 M 오류와 넥서스 5 : “createVirtualDisplay()”방법에서 표면을 얻는 데 실패했습니다. 당신의 솔루션은 안드로이드 6 및 안드로이드 7에서 멋지게 작동하지만 안드로이드 5에서는 음성만 기록합니다. 저는 제니모션 에뮬레이터를 연구하고 있습니다. MediaRecorder에 대한 한 가지 문제는 메서드를 올바른 순서로 정의해야 한다는 것입니다. 예를 들어 캠코더 프로파일을 설정하면 충돌하지 않고 AudioSource를 변경할 수 없습니다. 자바 독은이 뒤에 상태 컴퓨터에 대한 자세한 내용을 가지고 있습니다.

Android 응용 프로그램에서 프로그래밍 방식으로 스크린샷을 찍는 것은 사용자가 버그가 발생할 때 응용 프로그램 상태를 시각적으로 표현할 수 있도록 하는 데 매우 흥미로웠습니다.