Salve, volevo mostrarvil il codice che voglio usare per registrare da fotocamera:
Funziona correnttamente ma ricevo un warning quando inizio la registrazione e un errore quando la tremino
Ecco il codice
x1package com.adelchi.prova;
2
3import java.io.IOException;
4
5import java.util.ArrayList;
6
7import java.util.List;
8
9import android.app.Activity;
10
11import android.hardware.Camera;
12import android.hardware.Camera.Size;
13
14import android.media.MediaRecorder;
15import android.os.Bundle;
16
17import android.util.Log;
18
19import android.view.SurfaceHolder;
20import android.view.SurfaceView;
21import android.view.View;
22
23import android.view.View.OnClickListener;
24import android.widget.ImageButton;
25
26public class prova extends Activity implements SurfaceHolder.Callback{
27
28private SurfaceView mSurfaceView;
29private SurfaceHolder mSurfaceHolder;
30private Camera mCamera;
31private boolean mPreviewRunning;
32
33private static final String TAG = "RECORD";
34
35public void onCreate(Bundle savedInstanceState) {
36super.onCreate(savedInstanceState);
37
38setContentView(R.layout.main);
39
40mSurfaceView = (SurfaceView)findViewById(R.id.camera_surface);
41mSurfaceHolder = mSurfaceView.getHolder();
42mSurfaceHolder.addCallback(this);
43mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
44
45final ImageButton buttonPictureR = (ImageButton) findViewById(R.id.camera_surface_buttonR);
46final ImageButton buttonPictureS = (ImageButton) findViewById(R.id.camera_surface_buttonS);
47buttonPictureR.setOnClickListener(new OnClickListener(){
48public void onClick(View v) {
49
50startRecording();
51buttonPictureR.setVisibility(4);
52buttonPictureS.setVisibility(0);
53
54
55}
56});
57
58
59buttonPictureS.setOnClickListener(new OnClickListener(){
60public void onClick(View v) {
61
62stopRecording();
63buttonPictureR.setVisibility(0);
64buttonPictureS.setVisibility(4);
65
66}
67});
68
69}
70
71public void surfaceCreated(SurfaceHolder holder) {
72
73mCamera = Camera.open();
74
75}
76
77public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
78if (mPreviewRunning)
79mCamera.stopPreview();
80
81Camera.Parameters p = mCamera.getParameters();
82
83p.setPreviewSize(arg2, arg3);
84//p.setPreviewFormat(PixelFormat.JPEG);
85ArrayList<Size> list = (ArrayList<Size>) p.getSupportedPictureSizes();
86List<String> list2 = p.getSupportedFocusModes();
87int picture_width = list.get(0).width;
88int picture_height = list.get(0).height;
89p.setFocusMode(list2.get(0));
90
91p.setPictureSize(picture_width, picture_height);
92
93mCamera.setParameters(p);
94try {
95
96System.out.println("sono fuori");
97
98mCamera.setPreviewDisplay(arg0);
99mCamera.startPreview();
100mPreviewRunning = true;
101} catch (IOException e) { }
102
103}
104
105public void surfaceDestroyed(SurfaceHolder holder) {
106
107mCamera.stopPreview();
108mPreviewRunning = false;
109mCamera.release();
110
111}
112
113private MediaRecorder mediaRecorder;
114private final int MAX_TIME = 20000;
115
116public boolean startRecording(){
117try {
118
119mediaRecorder = new MediaRecorder();
120mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
121mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
122mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
123mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
124mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
125mediaRecorder.setMaxDuration((int) MAX_TIME);
126mediaRecorder.setVideoSize(320, 240);
127mediaRecorder.setVideoFrameRate(20);
128mediaRecorder.setOutputFile("/sdcard/recordvideooutput.3gp");
129
130mediaRecorder.prepare();
131mediaRecorder.start();
132
133return true;
134} catch (IllegalStateException e) {
135Log.e(TAG,e.getMessage());
136e.printStackTrace();
137return false;
138} catch (IOException e) {
139Log.e(TAG,e.getMessage());
140e.printStackTrace();
141return false;
142}
143}
144
145public void stopRecording(){
146mediaRecorder.stop();
147mediaRecorder.release(); // Now the object cannot be reused
148}
149}
Questi sono gli errori quando premo il pulsante per registrare:
12-10 15:01:17.197: WARN/System.err(9068): java.io.IOException: prepare failed.
12-10 15:01:17.220: WARN/System.err(9068): at android.media.MediaRecorder._prepare(Native Method)
12-10 15:01:17.220: WARN/System.err(9068): at android.media.MediaRecorder.prepare(MediaRecorder. java:530)
12-10 15:01:17.220: WARN/System.err(9068): at com.adelchi.prova.prova.startRecording(prova.java: 136)
12-10 15:01:17.220: WARN/System.err(9068): at com.adelchi.prova.prova$1.onClick(prova.java:50)
12-10
15:01:17.220: WARN/System.err(9068): at android.view.View.performClick(View.java:2461)
12-10
15:01:17.220: WARN/System.err(9068): at android.view.View$PerformClick.run(View.java:8890)
12-10
15:01:17.220: WARN/System.err(9068): at android.os.Handler.handleCallback(Handler.java:587 )
12-10
15:01:17.220: WARN/System.err(9068): at android.os.Handler.dispatchMessage(Handler.java:92 )
12-10
15:01:17.224: WARN/System.err(9068): at android.os.Looper.loop(Looper.java:123)
12-10 15:01:17.224: WARN/System.err(9068): at android.app.ActivityThread.main(ActivityThread.jav a:4627)
12-10
15:01:17.224: WARN/System.err(9068): at java.lang.reflect.Method.invokeNative(Native Method)
12-10
15:01:17.224: WARN/System.err(9068): at java.lang.reflect.Method.invoke(Method.java:521)
12-10
15:01:17.224: WARN/System.err(9068): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:871)
12-10
15:01:17.224: WARN/System.err(9068): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:629)
12-10 15:01:17.224: WARN/System.err(9068): at dalvik.system.NativeStart.main(Native Method)
Questo quando termino la registrazione
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): FATAL EXCEPTION: main
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): java.lang.IllegalStateException
12-10
15:01:22.529: ERROR/AndroidRuntime(9068): at android.media.MediaRecorder.stop(Native Method)
12-10
15:01:22.529: ERROR/AndroidRuntime(9068): at com.adelchi.prova.prova.stopRecording(prova.java:1 52)
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): at com.adelchi.prova.prova$2.onClick(prova.java:62)
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): at android.view.View.performClick(View.java:2461)
12-10
15:01:22.529: ERROR/AndroidRuntime(9068): at android.view.View$PerformClick.run(View.java:8890)
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): at android.os.Handler.handleCallback(Handler.java:587 )
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): at android.os.Handler.dispatchMessage(Handler.java:92 )
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): at android.os.Looper.loop(Looper.java:123)
12-10
15:01:22.529: ERROR/AndroidRuntime(9068): at android.app.ActivityThread.main(ActivityThread.jav a:4627)
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): at java.lang.reflect.Method.invokeNative(Native Method)
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): at java.lang.reflect.Method.invoke(Method.java:521)
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:871)
12-10
15:01:22.529: ERROR/AndroidRuntime(9068): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:629)
12-10 15:01:22.529: ERROR/AndroidRuntime(9068): at dalvik.system.NativeStart.main(Native Method)
12-10
15:01:22.552: WARN/ActivityManager(2501): Force finishing activity com.adelchi.prova/.prova
Se qualcuno può illuminarmi.....