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 :

Appeller une classe AppCompatActivity dans une autre


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 96
    Par défaut Appeller une classe AppCompatActivity dans une autre
    Bonjour tout le monde,

    J'ai une classe extends AppCompatActivity qui me permet de lire une vidéo (méthode launchVideo) et j'aimerais pouvoir l'appeler dans une classe extends AppCompatActivity.

    Voici ma classe me permettant de lire ma vidéo:

    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
    public class ReadVideo extends AppCompatActivity {
     
        // Lien vers la documentation de MX Video Player ==> https://sites.google.com/site/mxvpen/api
        public static final String MXVP = "com.mxtech.videoplayer.ad";
     
        public static final String EXTRA_VIDEO_LIST = "video_list";
        public static final String EXTRA_POSITION = "position";
     
        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
     
        public void launchVideo(View v) {
            try{
                // Chemin de la vidéo
                Uri videoUri = Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Movies/chrono.mp4");
     
                // Nouvelle activité qui permet de visionner une donnée (dans notre cas, la vidéo)
                Intent intent = new Intent(Intent.ACTION_VIEW);
     
                // On spécifie la donnée de l'activité ainsi que le MIME (ex: application, text, image, audio, etc.)
                // On veut lancer l'APPLICATION MX Video Player donc le MIME est "application"
                intent.setDataAndType(videoUri, "application/x-mpegURL");
     
                intent.putExtra(EXTRA_VIDEO_LIST, new Parcelable[] {videoUri});    // Permet d'éviter de lire toutes les vidéos du dossier du chemin envoyé
                intent.putExtra(EXTRA_POSITION, 10000);    // Commence la vidéo à 10sec
     
                //intent.setPackage(MXVP);    // Limite les applications possibles à celle de MX Video Player
                startActivity(intent);
            }
            catch( ActivityNotFoundException e2){
                displayToast(getResources().getString(R.string.error_unknownMX)); // Erreur, on affiche un message à l'utilisateur
                Log.e( "Error", getResources().getString(R.string.error_unknownMX));
            }
        }

    La classe dans laquelle je veux l'appeler:

    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
    public class SimpleTextClientActivity extends AppCompatActivity {
     
        private EditText textField;
        private Button button;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            textField = (EditText) findViewById(R.id.editText1); // reference to the text field
            button = (Button) findViewById(R.id.button); // reference to the send button
     
            // Button press event listener
            button.setOnClickListener(new View.OnClickListener() {
     
                public void onClick(View v) {
                    //messsage = textField.getText().toString(); // get the text message on the text field
                   // textField.setText(""); // Reset the text field to blank
                    ReadVideo task2 = new ReadVideo();
                    task2.launchVideo(v);
                }
            });
        }
    }
    Manifest:

    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
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.video.streaming.myapplication2"
        android:versionCode="1"
        android:versionName="1.0" >
     
        <uses-sdk
            android:minSdkVersion="21"
            android:targetSdkVersion="23" />
     
        <uses-permission android:name="android.permission.INTERNET" >
        </uses-permission>
     
        <application
            android:allowBackup="true"
            android:label="Test"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.video.streaming.myapplication2.SimpleTextClientActivity"
                android:label="Test" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
     
    </manifest>
    Activity Main :

    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
    <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=".SimpleTextClientActivity" >
     
        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:ems="10" >
     
            <requestFocus />
        </EditText>
     
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Regarder une vidéo !"
            android:id="@+id/button"
            android:layout_marginBottom="168dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true" />
     
    </RelativeLayout>
    Merci à vous.

  2. #2
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut


    En fait ton activité ReadVideo ne fait que lancer une autre activité capable de lire la video grâce à la fonction launchVideo.
    Vu ce que tu veux faire, tu n'as pas besoin d'intégrer ton activité ReadVideo dans SimpleTextClientActivity. Il suffit de copier/coller ta fonction launchVideo dans SimpleTextClientActivity. Et de la lancer dans onClick. Et ton activité ReadVideo ne sera plus utile.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 96
    Par défaut
    Ce que j'aimerais c'est vraiment l'intégrer parce que la classe ReadVideo je l'utilise aussi pour autre chose

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 96
    Par défaut
    Pour l'instant j'ai celà :

    Dans ma classe SimpleTextClientActivity :

    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
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
     
        textField = (EditText) findViewById(R.id.editText1); // reference to the text field
        button = (Button) findViewById(R.id.button); // reference to the send button
     
        // Button press event listener
        button.setOnClickListener(new View.OnClickListener() {
     
            public void onClick(View v) {
                //messsage = textField.getText().toString(); // get the text message on the text field
               // textField.setText(""); // Reset the text field to blank
                Intent videoIntent=new Intent(SimpleTextClientActivity .this,ReadVideo.class);
                startActivity(videoIntent);
     
     
            }
        });
    }
    Dans ReadVideo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     View v;
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        launchVideo(v);
    }
    Mais quand je lance l'application et je clique sur mon bouton l'appli crash. Est-ce un problème de manifest?

  5. #5
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut
    Tu peux te faire un objet attribut de ton activité SimpleTextClientActivity qui soit de type ReadVideo.

    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private class SimpleTextClientActivity  extends AppCompatActivity{
    	private ReadVideo readVideo = new readVideo();
     
            //le reste de ton code ...
     
    	// Button press event listener
    	button.setOnClickListener(new View.OnClickListener() {
     
    		public void onClick(View v) {
    			//messsage = textField.getText().toString(); // get the text message on the text field
    			// textField.setText(""); // Reset the text field to blank
    			readVideo.launchVideo();
    		}
    	});
    }

    Mais ce n'est pas très beau de faire ça car créer une activité avec un new ça ne se fait pas.

    Rien à voir avec ta question mais pourquoi passe tu une vue v à ta fonction launchVideo puisqu'elle ne l'utilise pas ?


    Autre méthode qui me parait mieux, ce serait de faire ta fonction launchVideo static, comme ça tu peux la lancer depuis SimpleTextClientActivity comme ceci : ReadVideo.launchVideo();

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2014
    Messages : 96
    Par défaut
    Merci à toi finalement c'était juste un problème de manifest, j ai oublié de mettre l'activité ReadVideo :p

Discussions similaires

  1. Appel d'une méthode d'une classe A dans une classe B
    Par halloumiali dans le forum Général Java
    Réponses: 1
    Dernier message: 16/04/2012, 00h30
  2. Réponses: 7
    Dernier message: 05/04/2011, 17h19
  3. Réponses: 21
    Dernier message: 14/01/2010, 12h50
  4. Réponses: 15
    Dernier message: 28/04/2009, 07h26
  5. Réponses: 6
    Dernier message: 30/03/2009, 18h13

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