Visualizzazione dei risultati da 1 a 1 su 1

Visualizzazione discussione

  1. #1

    [JAVA/ANDROID] Problema Video Recording in background

    Ciao a tutti ragazzi è un pochino di tempo che sto impazzendo per creare una classe che riesca a fare partire la registrazione video in automatico e sopratutto in background.

    Avrò letto 2000 pagine di tutti i tipi e fatto altrettante ricerche e alla fine sono riuscito a creare una piccola classe che però mi da un errore.

    Non riesco a capire cosa c'è che non va, spero che mi possiate dare una mano, vi posto il codice:

    Questa è la classe che fa la registrazione video:

    codice:
    import java.io.IOException;
    import android.app.Service;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.PixelFormat;
    import android.hardware.Camera;
    import android.media.CamcorderProfile;
    import android.media.MediaRecorder;
    import android.os.IBinder;
    import android.view.Gravity;
    import android.view.SurfaceHolder;
    import android.view.SurfaceHolder.Callback;
    import android.view.SurfaceView;
    import android.view.WindowManager;
    import android.view.WindowManager.LayoutParams;
    import android.widget.Toast;
    
    
    public class CameraService extends Service implements SurfaceHolder.Callback {
        public WindowManager windowManager;
        public SurfaceView surfaceView;
        public Camera camera = null;
        public MediaRecorder mediaRecorder = null;
        
        
        @Override
        public int onStartCommand(Intent intent, int flags, int startId){
            windowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
            surfaceView = new SurfaceView(getApplicationContext());
            LayoutParams layoutParams = new WindowManager.LayoutParams(
                    1, 1,
                    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                    WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                    PixelFormat.TRANSLUCENT
                    );
            layoutParams.gravity = Gravity.LEFT | Gravity.TOP;
            windowManager.addView(surfaceView, layoutParams);
            surfaceView.getHolder().addCallback(this);
            return START_STICKY;
        }
        
        
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            if(camera == null){
                try {
                    camera = camera.open();
                    camera.setPreviewDisplay(holder);
                    camera.startPreview();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
            startRecording(holder);
        }
        
        public void startRecording(SurfaceHolder surfaceHolder){
            
            mediaRecorder = new MediaRecorder();
            
            mediaRecorder.setCamera(camera);                                                    //1°
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);                    //2°
            mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);                        //3°
            mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));        //4°
            mediaRecorder.setOutputFile("/sdcard/video.mp4");                                    //5°
            mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());                        //6°
            //TUTTI GLI STEP PER AL GESTIONE DELLA TELECAMERA SONO STATI FATTI
            try{ mediaRecorder.prepare(); 
            }catch(IOException e){
                Toast.makeText(getApplicationContext(), "Prepare cam failed!", 1).show();
            }
            mediaRecorder.start();
        }
        
        @Override
        public void onDestroy(){
            mediaRecorder.stop();
            mediaRecorder.reset();
            mediaRecorder.release();
            
            camera.release();
    
    
            windowManager.removeView(surfaceView);
        }
    
    
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            // TODO Auto-generated method stub
            
        }
    
    
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            
        }
    
    
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
    
    
    }

    Questo è il main:

    codice:
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    
    public class MainActivity extends Activity {
        Button startRecording;
        Button stopRecording;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            startRecording = (Button)findViewById(R.id.buttonStartRecording);
            stopRecording = (Button)findViewById(R.id.buttonStopRecording);
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
        
        public void startRecording(View v){
            startService(new Intent(this, CameraService.class));
            Toast.makeText(getApplicationContext(), "Recording started!", 2).show();
        }
        
        public void stopRecording(View v){
            stopService(new Intent(this, CameraService.class));
            Toast.makeText(getApplicationContext(), "Recording stopped!", 2).show();
        }
    }

    Questo è il Manifest:

    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.testcameraservice"
        android:versionCode="1"
        android:versionName="1.0" >
    
    
        <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="21" />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <service android:enabled="true" 
                      android:name=".CameraService">
            </service>
        </application>
    
    
    </manifest>

    e questo è l'errore che mi genera:

    codice:
    03-01 20:41:06.996: E/AndroidRuntime(7781): FATAL EXCEPTION: main
    03-01 20:41:06.996: E/AndroidRuntime(7781): java.lang.RuntimeException: start failed.
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.media.MediaRecorder.start(Native Method)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at com.example.testcameraservice.CameraService.startRecording(CameraService.java:77)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at com.example.testcameraservice.CameraService.surfaceCreated(CameraService.java:59)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.SurfaceView.updateWindow(SurfaceView.java:591)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.SurfaceView.access$000(SurfaceView.java:81)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:173)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:707)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1944)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1113)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4481)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.Choreographer.doCallbacks(Choreographer.java:555)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.Choreographer.doFrame(Choreographer.java:525)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.os.Handler.handleCallback(Handler.java:615)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.os.Handler.dispatchMessage(Handler.java:92)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.os.Looper.loop(Looper.java:137)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at android.app.ActivityThread.main(ActivityThread.java:4867)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at java.lang.reflect.Method.invokeNative(Native Method)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at java.lang.reflect.Method.invoke(Method.java:511)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
    03-01 20:41:06.996: E/AndroidRuntime(7781):     at dalvik.system.NativeStart.main(Native Method)

    Vi ringrazio sempre per anticipatamente per la disponibilità!
    Ultima modifica di diabolik03; 01-03-2016 a 21:50

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.