<span style=
"font-size:12px"
>
public
class
MainActivity
extends
AppCompatActivity {
public
static
final
String TAG =
"MainActivity"
;
private
static
String EXTERNAL_STORAGE_PATH =
""
;
private
static
String RECORDED_FILE =
"video_recorded"
;
private
static
int
fileIndex =
0
;
private
static
String filename =
""
;
MediaPlayer player;
MediaRecorder recorder;
private
Camera camera;
SurfaceHolder holder;
Handler handler;
boolean
bRecord =
false
;
SurfaceView surface;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String state = Environment.getExternalStorageState();
if
(!state.equals(Environment.MEDIA_MOUNTED)) {
Log.d(TAG,
"External Storage Media is not mounted."
);
}
else
{
EXTERNAL_STORAGE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath();
}
camera = Camera.open();
surface =
new
SurfaceView(
this
);
holder = surface.getHolder();
holder.addCallback((SurfaceHolder.Callback)
this
);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
frame = (FrameLayout) findViewById(R.id.videoLayout);
frame.addView(surface);
Button recordBtn = (Button) findViewById(R.id.recordBtn);
Button recordStopBtn = (Button) findViewById(R.id.recordStopBtn);
Button playBtn = (Button) findViewById(R.id.playBtn);
Button playStopBtn = (Button) findViewById(R.id.playStopBtn);
recordBtn.setOnClickListener(
new
View.OnClickListener() {
public
void
onClick(View v) {
try
{
if
(recorder ==
null
) {
recorder =
new
MediaRecorder();
}
bRecord =
true
;
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoFrameRate(
25
);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
filename = createFilename();
recorder.setOutputFile(filename);
recorder.setPreviewDisplay(holder.getSurface());
handler =
new
Handler();
handler.postDelayed(
new
RunnableCapture(),
5000
);
recorder.prepare();
recorder.start();
}
catch
(Exception ex) {
Log.e(TAG,
"Exception : "
, ex);
recorder.release();
recorder =
null
;
}
}
});
recordStopBtn.setOnClickListener(
new
View.OnClickListener() {
public
void
onClick(View v) {
if
(recorder ==
null
)
return
;
bRecord =
false
;
recorder.stop();
recorder.reset();
recorder.release();
recorder =
null
;
ContentValues values =
new
ContentValues(
10
);
values.put(MediaStore.MediaColumns.TITLE,
"RecordedVideo"
);
values.put(MediaStore.MediaColumns.DATE_ADDED, System.currentTimeMillis() /
1000
);
values.put(MediaStore.MediaColumns.MIME_TYPE,
"video/mp4"
);
Uri videoUri = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
if
(videoUri ==
null
) {
Log.d(
"SampleVideoRecorder"
,
"Video insert failed."
);
return
;
}
sendBroadcast(
new
Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, videoUri));
}
});
private
String createFilename() {
fileIndex++;
String newFilename =
""
;
if
(EXTERNAL_STORAGE_PATH ==
null
|| EXTERNAL_STORAGE_PATH.equals(
""
)) {
newFilename = RECORDED_FILE + fileIndex +
".mp4"
;
}
else
{
newFilename = EXTERNAL_STORAGE_PATH +
"/"
+ RECORDED_FILE + fileIndex +
".mp4"
;
}
return
newFilename;
}
protected
void
onPause() {
if
(camera !=
null
) {
camera.release();
camera =
null
;
}
if
(recorder !=
null
) {
recorder.release();
recorder =
null
;
}
if
(player !=
null
) {
player.release();
player =
null
;
}
super
.onPause();
}
private
class
RunnableCapture
implements
Runnable {
@Override
public
void
run() {
int
width_frame = surface.getWidth();
int
height_frame = surface.getHeight();
surface.setDrawingCacheEnabled(
true
);
surface.buildDrawingCache(
true
);
/************핵심 *************/
Bitmap captureView = Bitmap.createBitmap(surface.getMeasuredWidth(), surface.getMeasuredHeight(), Bitmap.Config.ARGB_8888 );
Canvas screenShootCanvas =
new
Canvas(captureView);
surface.draw(screenShootCanvas);
FileOutputStream fos;
SimpleDateFormat formatter =
new
SimpleDateFormat(
"yyyyMMddHHmmss"
);
Date currentTime_1 =
new
Date();
String filename = formatter.format(currentTime_1);
File fileRoute =
null
;
fileRoute = Environment.getExternalStorageDirectory();
try
{
File path =
new
File(fileRoute,
"temp"
);
if
(!path.exists()){
path.mkdirs();
}
fos =
new
FileOutputStream(fileRoute+
"/temp/"
+filename+
".jpeg"
);
captureView.compress(Bitmap.CompressFormat.JPEG,
100
, fos);
surface.setDrawingCacheEnabled(
false
);
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
Toast.makeText(MainActivity.
this
,
"save image"
, Toast.LENGTH_SHORT).show();
if
(bRecord) {
handler.postDelayed(
this
,
5000
);
}
}
}
}</span>