Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 앱 만드는 법
- 안드로이드 예제
- 코딩
- 홍드로이드 강의
- 안드로이드 앱 만들기
- 앱 만들기
- 안드로이드 기초
- java
- 자바
- Android Studio
- 안드로이드 스튜디오
- 안드로이드
- Android Java
- Android
- 코틀린
- android tutorial
- 개발강의
- IOS
- android studio 앱 만드는 법
- 안드로이드 서비스
- flutter
- hongdroid
- 안드로이드 네비게이션 메뉴
- 개발자
- 홍드로이드
- android example
- 안드로이드 코딩 기초
- 플러터
- 자바 튜토리얼
- 안드로이드 튜토리얼
Archives
- Today
- Total
홍드로이드의 야매코딩
#18 안드로이드 스튜디오 동영상 녹화 (MediaRecorder) 예제 [ 홍드로이드 ] 본문
<build.gradle>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | apply plugin: 'com.android.application' android { compileSdkVersion 27 defaultConfig { applicationId "com.example.videorecordexample" minSdkVersion 15 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'gun0912.ted:tedpermission:2.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' } | cs |
<AndroidManifest.xml>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.videorecordexample"> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> | cs |
<activity_main.xml>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/btn_record" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="녹화 시작" /> <SurfaceView android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> | cs |
<MainActivity.java>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | package com.example.videorecordexample; import android.Manifest; import android.hardware.Camera; import android.media.CamcorderProfile; import android.media.MediaRecorder; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.gun0912.tedpermission.PermissionListener; import com.gun0912.tedpermission.TedPermission; import java.util.ArrayList; public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback { private Camera camera; private MediaRecorder mediaRecorder; private Button btn_record; private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; private boolean recording = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TedPermission.with(this) .setPermissionListener(permission) .setRationaleMessage("녹화를 위하여 권한을 허용해주세요.") .setDeniedMessage("권한이 거부되었습니다. 설정 > 권한에서 허용해주세요.") .setPermissions(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO) .check(); btn_record = (Button)findViewById(R.id.btn_record); btn_record.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (recording) { mediaRecorder.stop(); mediaRecorder.release(); camera.lock(); recording = false; } else { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "녹화가 시작되었습니다.", Toast.LENGTH_SHORT).show(); try { mediaRecorder = new MediaRecorder(); camera.unlock(); mediaRecorder.setCamera(camera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P)); mediaRecorder.setOrientationHint(90); mediaRecorder.setOutputFile("/sdcard/test.mp4"); mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface()); mediaRecorder.prepare(); mediaRecorder.start(); recording = true; } catch (Exception e) { e.printStackTrace(); mediaRecorder.release(); } } }); } } }); } PermissionListener permission = new PermissionListener() { @Override public void onPermissionGranted() { Toast.makeText(MainActivity.this, "권한 허가", Toast.LENGTH_SHORT).show(); camera = Camera.open(); camera.setDisplayOrientation(90); surfaceView = (SurfaceView)findViewById(R.id.surfaceView); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(MainActivity.this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } @Override public void onPermissionDenied(ArrayList<String> deniedPermissions) { Toast.makeText(MainActivity.this, "권한 거부", Toast.LENGTH_SHORT).show(); } }; @Override public void surfaceCreated(SurfaceHolder holder) { } private void refreshCamera(Camera camera) { if (surfaceHolder.getSurface() == null) { return; } try { camera.stopPreview(); } catch (Exception e) { e.printStackTrace(); } setCamera(camera); } private void setCamera(Camera cam) { camera = cam; } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { refreshCamera(camera); } @Override public void surfaceDestroyed(SurfaceHolder holder) { } } | cs |
'Android Java' 카테고리의 다른 글
#20 안드로이드 스튜디오 스피너 (Spinner) 드롭다운 메뉴 예제 [ 홍드로이드 ] (0) | 2019.06.08 |
---|---|
#19 안드로이드 스튜디오 FCM 푸시알림 예제 [ 홍드로이드 ] (0) | 2019.06.08 |
#17 안드로이드 스튜디오 백그라운드 음악 서비스(Service) 예제 [ 홍드로이드 ] (0) | 2019.06.02 |
#16 안드로이드 스튜디오 다이얼로그 팝업창 (Dialog) 예제 [ 홍드로이드 ] (1) | 2019.06.02 |
#15 안드로이드 스튜디오 Thread & Handler (스레드 & 핸들러) 예제 [ 홍드로이드 ] (0) | 2019.06.02 |
Comments