SVP ! Spinner onItemSelected ==> MediaPlayer
Résolu
Umwami
Messages postés
150
Statut
Membre
-
BunoCS Messages postés 16550 Statut Modérateur -
BunoCS Messages postés 16550 Statut Modérateur -
Bonjour à tous et toutes ! ="D
Cela fait maintenant 4 jours que je suis bloquer avec ce Mystère ! ="(
Je recherche la méthode pour lier les différents choix du Spinner au MediaPlayer tout simplement.
SVP évitez les subtilités de code ou les demi réponse car je suis un pure novice et je ne risque pas de trouver par magie x"D. J'ai littéralement chercher PARTOUT ! comme un acharné : Tutos, Forums et autres.
Aujourd'hui j'ai eu l'idée de jeter un coup d'oeil sur GitHub afin de chercher des codes source (open source) de Lecteur Audio qui utilisent un Spinner tout comme mon App afin de trouver cette méthode mais à chaque fois c'est
==> MediaPlayer + .mp3 sur Carte SD ou encore MediaPlayer + Button en ListView pffff... <="(
Voici le XML :
Le MainActivity :
Et enfin le strings.xml où vont se trouver les noms des choix (Spinner) :
Un Giga merci d'avance à celle ou celui qui aura la gentillesse de m'aider ! ❤ ="D
Cela fait maintenant 4 jours que je suis bloquer avec ce Mystère ! ="(
Je recherche la méthode pour lier les différents choix du Spinner au MediaPlayer tout simplement.
SVP évitez les subtilités de code ou les demi réponse car je suis un pure novice et je ne risque pas de trouver par magie x"D. J'ai littéralement chercher PARTOUT ! comme un acharné : Tutos, Forums et autres.
Aujourd'hui j'ai eu l'idée de jeter un coup d'oeil sur GitHub afin de chercher des codes source (open source) de Lecteur Audio qui utilisent un Spinner tout comme mon App afin de trouver cette méthode mais à chaque fois c'est
==> MediaPlayer + .mp3 sur Carte SD ou encore MediaPlayer + Button en ListView pffff... <="(
Voici le XML :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/fond_voxov1"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="270dp"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal">
<Spinner
android:id="@+id/spinner_pays"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/back_btn"
android:scrollbarSize="10dp"
android:popupBackground="@color/transparent1"
android:layout_weight="1"
android:entries="@array/pays"
android:textAlignment="center" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="500dp"
android:layout_weight="1"
android:gravity="center_horizontal"
android:orientation="horizontal">
<ScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@drawable/text_logo">
</ScrollView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="333dp"
android:layout_weight="1"
android:gravity="center_horizontal"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/elapsedTimeLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_weight="0"
android:text="0:11" />
<TextView
android:id="@+id/remainingTimeLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="240dp"
android:layout_weight="0"
android:text="-1:49" />
</LinearLayout>
<SeekBar
android:id="@+id/positionBar"
android:layout_width="300dp"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/playBtn"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/play"
android:layout_marginTop="10dp"
android:onClick="playBtnClick" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="10dp"
android:src="@drawable/sound"
android:layout_marginLeft="20dp" />
<SeekBar
android:id="@+id/volumeBar"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:layout_marginVertical="15dp"
android:max="100"
android:progress="50" />
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_marginTop="10dp"
android:src="@drawable/sound2"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
Le MainActivity :
package be.umwami.looply;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.TextView;
import java.io.File;
import java.io.FileReader;
import java.sql.ResultSet;
import static android.media.CamcorderProfile.get;
public class MainActivity extends AppCompatActivity {
//Spinner
Spinner spinner_pays;
int currentItem = 0;
//Eléments de l'activitée
Button playBtn;
SeekBar positionBar;
SeekBar volumeBar;
TextView elapsedTimeLabel;
TextView remainingTimeLabel;
MediaPlayer mp;
int totalTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner_pays = (Spinner)findViewById(R.id.spinner_pays);
spinner_pays.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
???????????????????????????????????????????????????????????????????????????????????????????
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
//Paramètres Musique
playBtn = (Button) findViewById(R.id.playBtn);
elapsedTimeLabel = (TextView) findViewById(R.id.elapsedTimeLabel);
remainingTimeLabel = (TextView) findViewById(R.id.remainingTimeLabel);
// Media Player
mp = MediaPlayer.create(this, R.raw.afghanistan);
mp.setLooping(true);
mp.seekTo(0);
mp.setVolume(1f, 1f);
totalTime = mp.getDuration();
// Position Bar
positionBar = (SeekBar) findViewById(R.id.positionBar);
positionBar.setMax(totalTime);
positionBar.setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mp.seekTo(progress);
positionBar.setProgress(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
);
// Volume Bar
volumeBar = (SeekBar) findViewById(R.id.volumeBar);
volumeBar.setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
float volumeNum = progress / 100f;
mp.setVolume(volumeNum, volumeNum);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
);
// Thread (Update positionBar & timeLabel)
new Thread(new Runnable() {
@Override
public void run() {
while (mp != null) {
try {
Message msg = new Message();
msg.what = mp.getCurrentPosition();
handler.sendMessage(msg);
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
}
}).start();
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
int currentPosition = msg.what;
// Update positionBar.
positionBar.setProgress(currentPosition);
// Update Labels.
String elapsedTime = createTimeLabel(currentPosition);
elapsedTimeLabel.setText(elapsedTime);
String remainingTime = createTimeLabel(totalTime-currentPosition);
remainingTimeLabel.setText("- " + remainingTime);
}
};
public String createTimeLabel(int time) {
String timeLabel = "";
int min = time / 1000 / 60;
int sec = time / 1000 % 60;
timeLabel = min + ":";
if (sec < 10) timeLabel += "0";
timeLabel += sec;
return timeLabel;
}
public void playBtnClick(View view) {
if (!mp.isPlaying()) {
// Stopping
mp.start();
playBtn.setBackgroundResource(R.drawable.stop);
} else {
// Playing
mp.pause();
playBtn.setBackgroundResource(R.drawable.play);
}
}
}
Et enfin le strings.xml où vont se trouver les noms des choix (Spinner) :
<resources>
<string name="app_name">looply</string>
<string-array name="pays">
<item>Afghanistan</item>
<item>Afrique du Sud</item>
<item>Albanie</item>
</string-array>
</resources>
Un Giga merci d'avance à celle ou celui qui aura la gentillesse de m'aider ! ❤ ="D
A voir également:
- SVP ! Spinner onItemSelected ==> MediaPlayer
- Comment spinner un texte - Télécharger - Outils professionnels
- Content spinner - Télécharger - Traitement de texte
- Windows mediaplayer - Télécharger - Lecture
- Mediaplayer classic - Télécharger - Lecture
- Vlc mediaplayer - Télécharger - Lecture
6 réponses
Re,
Avant de pouvoir (continuer à) t'aider, nous avons besoin de savoir :
- que veux-tu mettre dans ton Spinner
- que veux-tu mettre dans ton String-Array
- où sont stockés tes fichiers mp3
- où sont stockés tes fichiers lyrics
Avant de pouvoir (continuer à) t'aider, nous avons besoin de savoir :
- que veux-tu mettre dans ton Spinner
- que veux-tu mettre dans ton String-Array
- où sont stockés tes fichiers mp3
- où sont stockés tes fichiers lyrics
Maintenant que nous savons cela, quelques questions :
Comment sont liées tes données ?
Que doit-il se passer lorsque tu sélectionne un pays dans ton Spinner ?
Comment sont liées tes données ?
Que doit-il se passer lorsque tu sélectionne un pays dans ton Spinner ?
En fait ca fonctionne un peut comme un simple lecteur de musique avec sa playlist et le milieu de l'écran pour les Lyrics.
Voici un "schéma" :
Pour faire simple, les Lyrics (ScrollView) et le MediaPlayer dépendent du "Choix Spinner".
Voici un "schéma" :

Pour faire simple, les Lyrics (ScrollView) et le MediaPlayer dépendent du "Choix Spinner".
Voilà et c'est là que je coince, j'ai pleinement conscience que c'est à cette partie du code que cela ce passe :
Avec OnItemSelected et en ayant initialiser "l'Adaptater" mais ca fait 1 mois et quelques que j'ai commencer le langage Java via tutos et autres du coup je ne sais vraiment pas.
Dans ma tête c'est tout fait en "C++" (j'improvise haha) :
Et encore... Ça n'as pas l'air très juste ="d
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner_pays = (Spinner)findViewById(R.id.spinner_pays);
spinner_pays.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
!!!!!!!!!!!!!!!!! ICI ICI ICI ICI ICI ICI !!!!!!!!!!!!!!!!!
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
Avec OnItemSelected et en ayant initialiser "l'Adaptater" mais ca fait 1 mois et quelques que j'ai commencer le langage Java via tutos et autres du coup je ne sais vraiment pas.
Dans ma tête c'est tout fait en "C++" (j'improvise haha) :
if (Choix == 0) {
- afficher les Lyrics de "txt_afghanistant.txt" dans la ScrollView;
- charger la musique "Afghanistan.mp3" dans le MediaPlayer;
- préparer le MediaPlayer à être lancer;
} else if (Choix ==1) {
- afficher les Lyrics de "txt_afrique_du_sud.txt" dans la ScrollView;
- réinitialiser MediaPlayer (sinon le lecteur va bugger je pense);
- charger la musique "afrique_du_sud.mp3" dans le MediaPlayer;
- préparer le MediaPlayer à être lancer;
} else if (Choix ==2) {
- .... etc
Et encore... Ça n'as pas l'air très juste ="d
Je t'ai déjà passé un pseudo algo mais tu ne me dis pas ce qui ne va pas, ce qui bloque, etc. Je t'ai également dit que ta cascade de
Voici encore un exemple:
ifest inutile si tu initialises correctement tes données.
Voici encore un exemple:
public class MainActivity extends AppCompatActivity {
// déclaration des 3 sources de données.
// Attention ! Elles doivent être remplies dans le même ordre
String[] mCountries; // liste des pays
Int[] mMusicResources = {R.raw.musicFr, R.raw.musicEn}; //liste des fichiers musicaux, à compléter
Int[] mLyricsResources = {R.raw.lyricsFr, R.raw.lyricsEn}; //liste des lyrics, à compléter
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// récupération de la liste des pays
mCountries = getResources().getStringArray(R.array.countries);
// déclaration du spinner
spinner_pays = (Spinner)findViewById(R.id.spinner_pays);
spinner_pays.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
// ici, position correspond à l'index sélectionné. Si tout est bien rangé, tu sais que:
// mCountries[position] est le pays sélectionné
// mMusicResources[position] est l'ID du fichier musical à jouer
// mLyricsResources[position] est l'ID du fichier de lyrics à afficher
// lecture du fichier musical
MediaPlayer player = MediaPlayer.create(this, mMusicResources[position]);
player.start();
// affichage des lyrics (à adapter suivant ton besoin)
displayLyrics(mLyricsResources);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
void displayLyrics(int resID) {
InputStream inputStream = getResources().openRawResource(resID);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
StringBuilder text = new StringBuilder();
try {
while (( line = buffreader.readLine()) != null) {
text.append(line);
text.append('\n');
}
} catch (IOException e) {
// TODO
}
textView.setText(text.toString());
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour BrunoCS ! Vous passez une bonne journée j'espère ? ="D
I'm ready ! LET'S GO !!!
Bon ! A savoir, mon dossier raw est comme ceci de base :
Alors, pour suivre le raisonnement de la déclaration des 3 ressources, j'ai ranger le dossier raw comme ceci :
Mais cela reste en rouge, ce qui n'est pas logique :
De plus j'ai ces éléments en rouge :

Ici j'ai essayer de suivre vos instructions pour le "onItemSelected :

Please, dites-moi que je suis sur la bonne voix ?
I'm ready ! LET'S GO !!!

Bon ! A savoir, mon dossier raw est comme ceci de base :

Alors, pour suivre le raisonnement de la déclaration des 3 ressources, j'ai ranger le dossier raw comme ceci :

Mais cela reste en rouge, ce qui n'est pas logique :

De plus j'ai ces éléments en rouge :

Ici j'ai essayer de suivre vos instructions pour le "onItemSelected :

Please, dites-moi que je suis sur la bonne voix ?
Alors,
1. tu ne peux pas hiérarchiser tes données dans le dossier raw. C'est "en vrac"
2. pour les erreurs, il faut regarder les message que tu obtiens. Mais, a priori:
3. un peu de réflexion, que diable !
1. tu ne peux pas hiérarchiser tes données dans le dossier raw. C'est "en vrac"
2. pour les erreurs, il faut regarder les message que tu obtiens. Mais, a priori:
- pour le 1er, il ne faut pas passer
this
(car tu es dans une callback) maisMainActivity.this
. - pour le 2e, tu passes un tableau en paramètre alors qu'il attend un
int
. Attention aussi à ne pas déclarer une méthode à l'intérieur d'une autre méthode - pour le 3e, c'est normal :
buffreader
n'existe pas. C'est plutôtreader
qu'il faut mettre
3. un peu de réflexion, que diable !
positionest un
int!! Tu ne peux pas utiliser de méthode dessus ! Je t'ai montré comment récupérer les données stockés dans raw
1. dossier "raw" remis en place. OK
2.
2. 1/ si je ne me trompe pas, récupérer des données c'est bien
....2/ ici j'ai mit le
....3/ par contre je n'ai aucune idée de pourquoi le

Et enfin, vous dites << pour le 2e, tu passes un tableau en paramètre alors qu'il attend un int >> c'est à dire ?
A quel niveau ?
2.
buffreaderremplacer par
reader. OK
2. 1/ si je ne me trompe pas, récupérer des données c'est bien
getResources().
....2/ ici j'ai mit le
MainActivity.thismais toujours en rouge
....3/ par contre je n'ai aucune idée de pourquoi le
displayLyricsest en rouge, est-ce parce qu'il est dans
onItemSelected?

Et enfin, vous dites << pour le 2e, tu passes un tableau en paramètre alors qu'il attend un int >> c'est à dire ?
A quel niveau ?
Oui mais vous ne me dites même pas si les autres changements que j'ai effectuer son bon, alors oui, j'ai remis la virgule après le
Bref, j'en ai marre de cette Application de toute façon, je l'ai faite juste pour m’entraîner et pour mieux comprendre le codage d'une App java. Je m’arrête là. J'en apprendrais surement plus durant ma formation.
Encore merci du temps que vous m'avez consacrer pour résoudre ce problème BrunoCS.

MainActivity.this,mais cette ligne reste rouge, une fois de plus.
Bref, j'en ai marre de cette Application de toute façon, je l'ai faite juste pour m’entraîner et pour mieux comprendre le codage d'une App java. Je m’arrête là. J'en apprendrais surement plus durant ma formation.
Encore merci du temps que vous m'avez consacrer pour résoudre ce problème BrunoCS.

Re BrunoCS !
1. seulement des noms de Pays
2. les noms de ces Pays
3. les mp3 sont dans l'App (raw)
4. je ne sais pas où l'on stock des fichiers texte
2. les noms de ces Pays
-> ok, donc ça, je crois que c'est bon
3. les mp3 sont dans l'App (raw)
-> ok
4. je ne sais pas où l'on stock des fichiers texte
-> dans le répertoire raw aussi, si tu veux.