2017-09-29 3 views
1

Je veux capturer la vidéo de l'intention de la caméra et enregistrer dans le répertoire de l'application (ne pas enregistrer la vidéo dans la Galerie de périphériques) et insérez chemin vidéo dans la base de données pour charger et afficher dans mon applicationComment capturer une vidéo à partir de l'intention de la caméra?

i essayer dans mon activité:

public class VideoActivity extends Activity { 
    private TblVideo TBL_VIDEO; 
    private Uri fileUri; 
    public static final int MEDIA_TYPE_VIDEO = 2; 
    private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200; 

    long date = System.currentTimeMillis(); 
    String string_path = DATABASE_LOCATION + LAST_MOMENT_ID + "_" + date + ".mp4"; 
    File mediaFile = new File(string_path); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_video); 

     Button buttonRecording = (Button) findViewById(R.id.photo_btn_take_video); 
     buttonRecording.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       try { 
        ContentValues values = new ContentValues(); 
        fileUri = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values); 
        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
        fileUri = Uri.fromFile(mediaFile); 
        startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE); 
        getContentResolver().delete(fileUri, null, null); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    private String SaveMediaFile(int type) { 
     if (type == MEDIA_TYPE_VIDEO) { 
      FileOutputStream fileOutputStream = null; 
      try { 
       fileOutputStream = new FileOutputStream(mediaFile); 
      } catch (Exception e) { 
       displayToast(this, "خطای ذخیره ویدیو:" + "\n" + e.toString()); 
      } finally { 
       try { 
        assert fileOutputStream != null; 
        fileOutputStream.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     return string_path; 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) { 
      try { 
       if (resultCode == RESULT_OK) { 
        insertVideo(); 
       } else if (resultCode == RESULT_CANCELED) { 
        displayToast(this, "ضبط لغو شد"); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

mais quand aller dans le répertoire de fichiers, la taille de la vidéo est 0Kb !! et enregistrer dans la galerie de l'appareil Comment résoudre ce problème? grâce

+1

« Je veux capturer la vidéo de l'intention de la caméra et enregistrer dans le répertoire de l'application (ne pas enregistrer la vidéo dans la Galerie du périphérique) » - vous avez pas de code qui ne tout cela. Vous ne demandez pas d'enregistrer la vidéo dans le "répertoire de l'application" et vous * dites * au "MediaStore" de connaître la vidéo. – CommonsWare

+0

merci - comment enregistrer dans mon répertoire app? –

Répondre

1

et essayer cela, mais l'application est l'accident:

buttonRecording.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      try { 
       ContentValues values = new ContentValues(); 
       fileUri = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values); 
       Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
       intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
       startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      fileUri = data.getData(); 
      FileOutputStream fileOutputStream = null; 
      try { 
       FileInputStream fileInputStream = new FileInputStream(fileUri.getPath()); 
       fileOutputStream = new FileOutputStream(mediaFile); 
       byte[] buf = new byte[1024]; 
       int len; 
       while ((len = fileInputStream.read(buf)) > 0) { 
        fileOutputStream.write(buf, 0, len); 
       } 
       fileInputStream.close(); 
       fileOutputStream.close(); 
       insertVideo(); 
       getContentResolver().delete(fileUri, null, null); 
      } catch (Exception e) { 
       displayToast(this, "خطای ذخیره ویدیو:" + "\n" + e.toString()); 
      } finally { 
       try { 
        assert fileOutputStream != null; 
        fileOutputStream.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } else if (resultCode == RESULT_CANCELED) { 
      displayToast(this, "ضبط لغو شد"); 
     } 
    } 
} 
1

-je utiliser ce et enregistrer le fichier vidéo après résultat d'activité est OK, enregistrer la vidéo dans le répertoire!

private String SaveMediaFile() { 
    try { 
     InputStream in = getContentResolver().openInputStream(fileUri); // Uri 
     OutputStream out = new FileOutputStream(mediaFile); // file 
     byte[] buf = new byte[1024]; 
     int len; 
     assert in != null; 
     while ((len = in.read(buf)) > 0) { 
      out.write(buf, 0, len); 
     } 
     out.close(); 
     in.close(); 
    } catch (Exception e) { 
     displayToast(this, "خطای ذخیره ویدیو"); 
    } 
    return string_path; 
} 

grâce