Appeller une classe AppCompatActivity dans une autre

Résolu/Fermé
Rayan958 - 7 juin 2016 à 11:28
 Rayan958 - 7 juin 2016 à 14:50
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:

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:

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:

<?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 :

<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.

4 réponses

BunoCS Messages postés 15491 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 septembre 2024 3 907
7 juin 2016 à 11:38
Hello,

Pour lancer une Activity, il faut utiliser
startActivity()

0
Oui ça je sais. Je le fais dans la lecture de la vidéo
0
BunoCS Messages postés 15491 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 septembre 2024 3 907
7 juin 2016 à 11:48
class ReadVideo extends AppCompatActivity
[...]
ReadVideo task2 = new ReadVideo();
task2.launchVideo(v);


ReadVideo
étant de type
Activity
, il te faut un
startActivity()
pour la lancer.

Je note que tu lances une Activity...pour lancer une autre Activity? Y'a pas moyen de simplifier?
0
J'ai fait quelques modifs et j'ai cela :

Dans ma classe SimpleTextClientActivity :

 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 :

 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?
0
BunoCS Messages postés 15491 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 septembre 2024 3 907
7 juin 2016 à 12:53
Tu as quoi comme message d'erreur dans les logs?

launchVideo(v);

-->
v 
n'est pas initialisée...tu t'en sers vraiment?
0
Problème résolu : j'ai juste oublié d'indiquer dans le manifest l'activité ReadVideo .


Merci à toi .
0