안 드 로 이 드 비디오 / 비디오 파일 열기
20455 단어 android
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<SurfaceView
android:id="@+id/arc_hf_video_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/arc_hf_video_timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="40dp"
android:textColor="#ffff0000"
android:textSize="35dp"
android:textStyle="bold" >
</TextView>
<LinearLayout
android:id="@+id/arc_hf_video_btn"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:gravity="center"
android:orientation="vertical" >
<Button
android:id="@+id/arc_hf_video_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/arc_hf_video_start" />
<Button
android:id="@+id/arc_hf_video_return"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/arc_hf_video_return" />
</LinearLayout>
</RelativeLayout>
주종 ArcHFVideo.java
public class ArcHFVideo extends Activity implements SurfaceHolder.Callback {
private Button mVideoStartBtn, mVideoReturnBtn;
private SurfaceView mSurfaceview;
private MediaRecorder mMediaRecorder;
private SurfaceHolder mSurfaceHolder; //
private File mRecVedioPath;
private File mRecAudioFile;
private TextView timer;
private int hour = 0;
private int minute = 0;
private int second = 0;
private boolean bool;
private int parentId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.map_video);
parentId = getIntent().getIntExtra("parentId", 0);
timer = (TextView) findViewById(R.id.arc_hf_video_timer);
mVideoStartBtn = (Button) findViewById(R.id.arc_hf_video_start);
mVideoReturnBtn = (Button) findViewById(R.id.arc_hf_video_return);
mSurfaceview = (SurfaceView) this.findViewById(R.id.arc_hf_video_view);
//
timer.setVisibility(View.GONE);
//
mRecVedioPath = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/hfdatabase/temp/");
if (!mRecVedioPath.exists()) {
mRecVedioPath.mkdirs();
}
//
SurfaceHolder holder = mSurfaceview.getHolder();
holder.addCallback(ArcHFVideo.this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mVideoStartBtn.setOnClickListener(new Button.OnClickListener() {
private boolean isRecording = true;
@Override
public void onClick(View v) {
Drawable iconStart = getResources().getDrawable(
R.drawable.arc_hf_video_start);
Drawable iconStop = getResources().getDrawable(
R.drawable.arc_hf_video_stop);
if (isRecording) {
mVideoStartBtn.setBackgroundDrawable(iconStop);
bool = true;
if (mMediaRecorder == null)
mMediaRecorder = new MediaRecorder();
else
mMediaRecorder.reset();
mMediaRecorder.setPreviewDisplay(mSurfaceHolder
.getSurface());
mMediaRecorder
.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder
.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder
.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mMediaRecorder
.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder
.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setVideoSize(176, 144);
mMediaRecorder.setVideoFrameRate(15);
try {
mRecAudioFile = File.createTempFile("Vedio", ".3gp",
mRecVedioPath);
} catch (IOException e1) {
e1.printStackTrace();
}
mMediaRecorder.setOutputFile(mRecAudioFile
.getAbsolutePath());
try {
mMediaRecorder.prepare();
timer.setVisibility(View.VISIBLE);
handler.postDelayed(task, 1000);
mMediaRecorder.start();
} catch (Exception e) {
e.printStackTrace();
}
isRecording = !isRecording;
} else {
mVideoStartBtn.setBackgroundDrawable(iconStart);
if (mMediaRecorder != null) {
mMediaRecorder.stop();
bool = false;
timer.setText(format(hour) + ":" + format(minute) + ":"
+ format(second));
mMediaRecorder.release();
mMediaRecorder = null;
audioRename();
}
isRecording = !isRecording;
}
}
});
mVideoReturnBtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
if (mMediaRecorder != null) {
mMediaRecorder.stop();
mMediaRecorder.release();
mMediaRecorder = null;
}
audioRename();
finish();
}
});
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mSurfaceHolder = holder;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
mSurfaceHolder = holder;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mSurfaceview = null;
mSurfaceHolder = null;
mMediaRecorder = null;
}
/*
* Audio
*/
protected void audioRename() {
String path = Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ "/hfdatabase/video/"
+ String.valueOf(parentId) + "/";
String fileName = new SimpleDateFormat("yyyyMMddHHmmss")
.format(new Date()) + ".3gp";
File out = new File(path);
if (!out.exists()) {
out.mkdirs();
}
out = new File(path, fileName);
mRecAudioFile.renameTo(out);
}
/*
* ,
*/
private Handler handler = new Handler();
private Runnable task = new Runnable() {
public void run() {
if (bool) {
handler.postDelayed(this, 1000);
second++;
if (second < 60) {
timer.setText(format(second));
} else if (second < 3600) {
minute = second / 60;
second = second % 60;
timer.setText(format(minute) + ":" + format(second));
} else {
hour = second / 3600;
minute = (second % 3600) / 60;
second = (second % 3600) % 60;
timer.setText(format(hour) + ":" + format(minute) + ":"
+ format(second));
}
}
}
};
/*
*
*/
public String format(int i) {
String s = i + "";
if (s.length() == 1) {
s = "0" + s;
}
return s;
}
}
지정 한 경로 의 video 파일 열기
File f = new File(filePath);
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(f), "video/*");
startActivity(intent);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.