Android 5.0+화면 녹화 구현 예시 코드
6050 단어 Android5.0화면 녹화
안 드 로 이 드 는 4.0 부터 모 바 일 화면 녹화 방법 을 제 공 했 지만 루트 권한 이 필요 해 쉽 지 않 았 다.그러나 5.0 부터 시스템 은 app 에 화면 을 녹화 하 는 일련의 방법 을 제공 합 니 다.루트 권한 이 필요 하지 않 고 사용자 의 권한 만 있 으 면 화면 을 녹화 할 수 있 습 니 다.상대 적 으로 간단 합 니 다.본 고 는 인터넷 상의 다른 녹화 자 료 를 참고 한 후에 완성 한 것 이다.감사 하 다.다음은 스크린 기능 을 개발 하 는 일련의 절차 와 실현 과정 에서 겪 어야 할 주의사항 을 소개 한다.
실현 절차
1.목록 파일 에 필요 한 권한 설명
녹음 에 마 이 크 를 사용 하기 때문에 오디 오 권한 을 더 해 야 합 니 다.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
개발 한 app targetApi 가 6.0 이상 이면 동적 으로 권한 을 가 져 와 야 합 니 다.
public static void checkPermission(AppCompatActivity activity) {
if (Build.VERSION.SDK_INT >= 23) {
int checkPermission =
ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO)
+ ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE)
+ ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE);
if (checkPermission != PackageManager.PERMISSION_GRANTED) {
//
ActivityCompat.requestPermissions(activity, new String[]{
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE}, 123);
return;
} else {
return;
}
}
return;
}
2.사용자 녹화 화면 인증 가 져 오기여기 서 먼저 MediaProjectionManager 를 소개 합 니 다.MediaProjectionManager 는 시스템 이 제공 하 는 서비스 입 니 다.이 서비스 대상 을 받 으 면 Intent 를 만 들 수 있 습 니 다.이 Intent 를 통 해 탄 상자 스타일 의 Activity 를 시작 할 수 있 습 니 다.사용자 가 권한 을 부여 하면 다음 화면 녹 화 를 계속 할 수 있 습 니 다.설명 이 필요 한 것 은 Intent 는 다른 Activity 를 시작 하 는 것 이 고 극히 적은 기종 이 대응 하 는 권한 수여 Activity 가 없 기 때문에 여기 서 판단 을 많이 해서 응용 이 무 너 지지 않도록 해 야 한다.
MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) activity.
getSystemService(Context.MEDIA_PROJECTION_SERVICE);
if (mediaProjectionManager != null){
Intent intent = mediaProjectionManager.createScreenCaptureIntent();
PackageManager packageManager = activity.getPackageManager();
if (packageManager.resolveActivity(intent,PackageManager.MATCH_DEFAULT_ONLY) != null){
// Activity
activity.startActivityForResult(intent,requestCode);
}else {
Toast.makeText(activity,R.string.can_not_record_tip,Toast.LENGTH_SHORT).show();
}
}
3.onActivity Result 에서 사용자 의 권한 수 여 를 처리 합 니 다.사용자 가 권한 을 수 여 했 더 라 도 녹화 작업 에 동의 하 더 라 도 이상 을 포착 해 야 합 니 다.왜냐하면 이러한 상황 이 발생 할 수 있 기 때 문 입 니 다.즉,사용자 가 녹화 작업 에 동의 할 때 시스템 도 녹화 작업 을 하고 있 고 녹화 작업 이 충돌 할 수 있 기 때 문 입 니 다.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK){
try {
ScreenUtil.setUpData(resultCode,data);
} catch (Exception e) {
e.printStackTrace();
}
} else {
ToastUtil.show(this," ");
}
}
4.MediaRecorder 를 초기 화하 고 VirtualDisplay 를 만 듭 니 다.
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void setUpMediaRecorder() {
mRecordFilePath = getSaveDirectory() + File.separator+ System.currentTimeMillis() + ".mp4";
if (mMediaRecorder == null){
mMediaRecorder = new MediaRecorder();
}
//
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
//
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//
mMediaRecorder.setOutputFile( mRecordFilePath );
//
mMediaRecorder.setVideoSize(mRecordWidth, mRecordHeight);
//
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//
mMediaRecorder.setVideoEncodingBitRate((int) (mRecordWidth * mRecordHeight * 3.6));
//
mMediaRecorder.setVideoFrameRate(20);
try {
mMediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
이 단 계 는 전체 녹화 화면 조작 에서 가장 관건 적 인 단계 이다!우 리 는 MediaRecorder 를 초기 화 했 고 음성 녹음 여부,녹화 파일 형식,녹화 파일 경로,음성 영상의 인 코더,비트 레이트,영상 프레임 율 등 을 설정 했다.그리고 3 단계 에 있 는 resultCode 와 data 를 필요 한 매개 변수 로 MediaProjectionManager 를 통 해 VirtualDisplay 를 만 듭 니 다.VirtualDisplay 는 화면의 내용 을 캡 처 하고 캡 처 한 내용 을 Surface 에 렌 더 링 할 수 있 는 가상 디 스 플레이 로 이해 할 수 있 습 니 다(Surace 는 MediaRecorder 가 제공 하고 getSurface()방법 으로 얻 을 수 있 습 니 다).MediaRecorder 는 이 를 Mp4 문서 로 패키지 처리 합 니 다.
상기 절 차 를 거 쳐 prepare 를 한 후에 MediaRecorder.start()를 다시 호출 하면 녹화 화면 을 시작 할 수 있 습 니 다.여기 서도 동의 할 때 start()방법 으로 녹화 화면 을 시작 한 후에 stop()방법 으로 녹화 화면 을 중단 할 수 없습니다.그렇지 않 으 면 무 너 집 니 다.테스트 는 녹화 기능 을 테스트 할 때 즉시 녹화 화면 을 멈 추고 응용 프로그램 이 무 너 져 원인 을 찾 지 못 했다.원본 코드(API 26)의 주석 이 보일 때 까지
그래서 어차피 무 너 지기 위해 stop 에서 이상 을 포착 하고 MediaRecorder 를 비 워 두 었 다가 다음 녹화 때 다시 MediaRecorder 를 생 성 합 니 다.
마지막.
지식 수준 이 제한 되 어 있 기 때문에 잘못된 누락 을 피하 기 어렵 습 니 다.지적 을 환영 합 니 다!프로젝트 주소화면 녹화
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 5.0+CollapsingToolbarLayout 사용 설명Collapsing Toolbar Layout 역할 은 접 을 수 있 는 Toolbar 를 제공 합 니 다.FrameLayout 에 계승 하여 layot 를 설정 합 니 다.scrollFlags,Collapsing ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.