Comment enregistrer une vidéo à partir de l'arrière-plan de l'application: Android

Je développe une application qui pourra enregistrer la vidéo à partir de l'arrière-plan de l'application en utilisant le Service .

Description du problème :

  • Comment mettre à jour les contacts existants?
  • Quelle est l'utilisation de MemoryFile dans Android?
  • Erreur avec google_play_services_version value from aar library
  • Un projet avec ce nom existe déjà dans l'eclipse de l'espace de travail
  • Définir l'image de fond pour la mise en page relative?
  • ProgressDialog et AlertDialog provoquent une fenêtre filtrée
  • Dans mon enregistrement, l'enregistrement sera programmé. Si l'utilisateur souhaite enregistrer la vidéo de 13 h à 15 h, il planifiera la tâche et pourra sortir de l'application. L'application commencera automatiquement à enregistrer de 1PM à 3PM.

    Ce que j'ai fait encore:

    J'ai googlé sur ma requête, mais je n'ai pas eu de solution. De nombreux articles disent que ce n'est pas possible. Mais dans Google Play, il existe certaines applications (par exemple, MyCar Recorder ) qui peuvent enregistrer une vidéo à partir d'un fond d'application.

    J'ai eu un article sur le même, mais ça ne fonctionne pas.

    Quelle est la manière d'implémenter cette fonctionnalité?

  • Si, sinon, fonctionne, changez pas
  • Comment détecter les tablettes Android en général. Agent utilisateur?
  • Animation de propriété Android
  • Android map v2 zoom pour afficher tous les marqueurs
  • Vibration et Sound par défaut lors de la notification
  • Comment ajouter la catégorie sur l'en-tête de préférence?
  • 2 Solutions collect form web for “Comment enregistrer une vidéo à partir de l'arrière-plan de l'application: Android”

    1- J'ai créé une activité pour démarrer un service comme celui-ci:

     package com.android.camerarecorder; import android.app.Activity; import android.content.Intent; import android.hardware.Camera; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; public class CameraRecorder extends Activity implements SurfaceHolder.Callback { private static final String TAG = "Recorder"; public static SurfaceView mSurfaceView; public static SurfaceHolder mSurfaceHolder; public static Camera mCamera ; public static boolean mPreviewRunning; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mSurfaceView = (SurfaceView) findViewById(R.id.surfaceView1); mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(this); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); Button btnStart = (Button) findViewById(R.id.StartService); btnStart.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(CameraRecorder.this, RecorderService.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startService(intent); finish(); } }); Button btnStop = (Button) findViewById(R.id.StopService); btnStop.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopService(new Intent(CameraRecorder.this, RecorderService.class)); } }); } @Override public void surfaceCreated(SurfaceHolder holder) { } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } } 

    2 – Maintenant, j'ai créé un service pour enregistrer la vidéo en arrière plan comme ceci:

      package com.android.camerarecorder; import java.io.IOException; import java.util.List; import android.app.Service; import android.content.Intent; import android.graphics.PixelFormat; import android.hardware.Camera; import android.hardware.Camera.Size; import android.media.MediaRecorder; import android.os.IBinder; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.Toast; public class RecorderService extends Service { private static final String TAG = "RecorderService"; private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; private static Camera mServiceCamera; private boolean mRecordingStatus; private MediaRecorder mMediaRecorder; @Override public void onCreate() { mRecordingStatus = false; //mServiceCamera = CameraRecorder.mCamera; mServiceCamera = Camera.open(1); mSurfaceView = CameraRecorder.mSurfaceView; mSurfaceHolder = CameraRecorder.mSurfaceHolder; super.onCreate(); if (mRecordingStatus == false) startRecording(); } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onDestroy() { stopRecording(); mRecordingStatus = false; super.onDestroy(); } public boolean startRecording(){ try { Toast.makeText(getBaseContext(), "Recording Started", Toast.LENGTH_SHORT).show(); //mServiceCamera = Camera.open(); Camera.Parameters params = mServiceCamera.getParameters(); mServiceCamera.setParameters(params); Camera.Parameters p = mServiceCamera.getParameters(); final List<Size> listSize = p.getSupportedPreviewSizes(); Size mPreviewSize = listSize.get(2); Log.v(TAG, "use: width = " + mPreviewSize.width + " height = " + mPreviewSize.height); p.setPreviewSize(mPreviewSize.width, mPreviewSize.height); p.setPreviewFormat(PixelFormat.YCbCr_420_SP); mServiceCamera.setParameters(p); try { mServiceCamera.setPreviewDisplay(mSurfaceHolder); mServiceCamera.startPreview(); } catch (IOException e) { Log.e(TAG, e.getMessage()); e.printStackTrace(); } mServiceCamera.unlock(); mMediaRecorder = new MediaRecorder(); mMediaRecorder.setCamera(mServiceCamera); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); mMediaRecorder.setOutputFile("/sdcard/video.mp4"); mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height); mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); mMediaRecorder.prepare(); mMediaRecorder.start(); mRecordingStatus = true; return true; } catch (IllegalStateException e) { Log.d(TAG, e.getMessage()); e.printStackTrace(); return false; } catch (IOException e) { Log.d(TAG, e.getMessage()); e.printStackTrace(); return false; } } public void stopRecording() { Toast.makeText(getBaseContext(), "Recording Stopped", Toast.LENGTH_SHORT).show(); try { mServiceCamera.reconnect(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mMediaRecorder.stop(); mMediaRecorder.reset(); mServiceCamera.stopPreview(); mMediaRecorder.release(); mServiceCamera.release(); mServiceCamera = null; } } 

    Il créera un fichier video.mp4 dans votre carte SD. Vous pouvez modifier le code pour ajouter plus de fonctionnalités, mais les fonctionnalités de base sont obtenues grâce à ce code, c'est-à-dire enregistrer une vidéo en arrière-plan.

    REMARQUE: j'ai démarré le service via un clic de bouton dans l'activité, mais vous pouvez le démarrer par n'importe quelle autre manière, comme broadcastreceiver etc.

    J'espère que cela aide!! À votre santé.

    Oui, vous pouvez enregistrer la vidéo de fond comme ceci:

    Tout d'abord, créez une application vidéo à l'aide du service. Ne placez pas sa vue pour qu'elle ne soit pas visible. Si vous le faites en service, c'est mieux parce que …

    Deuxièmement, vous pouvez utiliser AlarmManager pour régler l'alarme d'un temps particulier, puis à ce moment-là, en utilisant l'intention, recommencez votre service. Pour arrêter votre application, vous pouvez également utiliser AlarmManager.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.