IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Lecture d'une vidéo


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 29
    Points
    29
    Par défaut Lecture d'une vidéo
    Bonjour à tous,

    Je débute sur Android et je souhaite pouvoir lire une vidéo que je viens de filmer à l'aide d'une application composée d'une seule activité. Cette activité a juste un bouton vidéo pour accéder à la caméra, et une VideoView pour voir la vidéo.

    J'arrive à bien coder l'enregistrement de la vidéo, mais quand je reviens sur l'activité une fois que la vidéo a été prise et que je clique sur mon objet VideoView, l'application plante en me disant "l'application "testVideo" s'est arrêtée"

    Je suppose qu'il manque quelque chose dans mon code. Dois-je utiliser un objet MediaPlayer? Ai-je oublié d'implémenter des méthodes importantes? Je vous remercie d'avance de votre aide.

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ****xmlns:tools="http://schemas.android.com/tools"
    ****android:layout_width="match_parent"
    ****android:layout_height="match_parent"
    ****android:paddingBottom="@dimen/activity_vertical_margin"
    ****android:paddingLeft="@dimen/activity_horizontal_margin"
    ****android:paddingRight="@dimen/activity_horizontal_margin"
    ****android:paddingTop="@dimen/activity_vertical_margin"
    ****tools:context="com.example.testvideo.MainActivity$PlaceholderFragment"
    ****android:background="#303030">
    *
    ****<VideoView
    ****android:id="@+id/videoView"*
    ****android:layout_width="fill_parent"
    ****android:layout_height="200dp"
    ****/>
    *****
    ****<Button
    ********android:id="@+id/video"
    ********android:layout_width="wrap_content"
    ********android:layout_height="wrap_content"
    ********android:layout_centerHorizontal="true"
    ********android:layout_centerVertical="true"
    ********android:text="@string/video"
    ********android:layout_below="@id/videoView" />
    *
    </RelativeLayout>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    public class MainActivity extends Activity{
    Button video;
    Uri path;
    File file;
    *
    private static final int VIDEO = 0;
    *
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    **super.onCreate(savedInstanceState);
    **setContentView(R.layout.fragment_main);
    **video=(Button) findViewById(R.id.video);
    *
    **video.setOnClickListener(new View.OnClickListener() {
    *
    ****@Override
    ****public void onClick(View arg0) {
    **********File file = new File(Environment.getExternalStorageDirectory()+File.separator+"my_movie.mp4");*
    **********Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    **********intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
    **********startActivityForResult(intent, VIDEO);
    *
    ****}
    });
    *
    }
    *
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    **if (requestCode == VIDEO) {
    ****if(resultCode == RESULT_OK) {
    ******path = data.getData();
    **********VideoView video = (VideoView) findViewById(R.id.videoView);
    **********video.setMediaController(new MediaController(getBaseContext()));
    **********video.setVideoPath(path.toString());
    **********video.requestFocus();
    **********video.start();
    ****}
    **}
    }

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Up au cas où quelqu'un peut m'aider, mon code n'est vraiment pas long à checker. Merci d'avance.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    Ne connaissant pas la fonction vidéo sur Android, je ne vais pas pouvoir te dire grand chose.

    Mais pour commencer, si tu veux savoir exactement la nature de l'erreur, il faut aller dans le logcat : http://nbenbourahla.developpez.com/t...s-application/
    Au plantage, un bloc de ligne rouge apparaîtrons, et les gens pourrons alors plus facilement t'aider en sachant exactement d'ou vient l'erreur.

    Et je ne sais pas comment tu fais pour ajouter tous ces *** à ton code, mais ca le rend moins lisible.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Bonjour et merci pour la réponse. Je n'ai pas ces *** dans le code d'origine bien sûr, elles ont dû s'ajouter après coup quand j'ai écrit le message.
    J'ai ici l'ensemble des lignes rouges que le logcat me renvoie:

    10-05 21:58:03.739: E/AndroidRuntime(1683): FATAL EXCEPTION: main

    10-05 21:58:03.739: E/AndroidRuntime(1683): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.view.ViewRootImpl.setView(ViewRootImpl.java:664)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.widget.MediaController.show(MediaController.java:435)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.widget.MediaController.show(MediaController.java:394)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.widget.VideoView$2.onPrepared(VideoView.java:428)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2125)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.os.Handler.dispatchMessage(Handler.java:107)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.os.Looper.loop(Looper.java:194)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at android.app.ActivityThread.main(ActivityThread.java:5370)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at java.lang.reflect.Method.invokeNative(Native Method)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at java.lang.reflect.Method.invoke(Method.java:525)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)

    10-05 21:58:03.739: E/AndroidRuntime(1683): at dalvik.system.NativeStart.main(Native Method)

    10-05 21:58:03.779: W/MediaPlayer(1683): info/warning (3, 0)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 475
    Points : 586
    Points
    586
    Par défaut
    Grâce à internet, on peut trouver la solution. Pour faire simple, tu veux utiliser le MediaController avant la fin de la création de l'activité.

    1ere solution possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (!((Activity)your_context).isFinishing()) {
     video.setMediaController(new MediaController(getBaseContext()));
    }

    2e solution :
    tu dois spécifier le context de l'activité dans MediaController, pas le context de l'application. D'où changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    video.setMediaController(new MediaController(getBaseContext()));
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    video.setMediaController(new MediaController(MainActivity.this);

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Tous mes remerciements Turvy, j'ai testé la deuxième solution et ça a marché.

    Je n'avais pas réalisé qu'il existait une telle différence entre le contexte de l'application et celui de l'activité, et ce d'autant plus que mon appli est simplement composé de cette activité.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture d'une vidéo au premier plan
    Par pasqual dans le forum Flash
    Réponses: 1
    Dernier message: 07/01/2008, 19h59
  2. Réponses: 1
    Dernier message: 10/05/2007, 13h22
  3. Créer pause/lecture pour une vidéo en flash
    Par Justin_C dans le forum Flash
    Réponses: 4
    Dernier message: 23/11/2006, 09h46
  4. Réponses: 3
    Dernier message: 13/11/2006, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo