Je suis la programmation d'un lecteur de musique et j'ai 2 activités:lecteur de musique Android - Un PlayerActivity à un moment
Le premier (MainActivity) contient une ListView de chansons, et je mets un OnItemClickListener (à l'intérieur de son onCreate() méthode) qui ouvre une nouvelle activité appelée PlayerActivity passant par la position de l'élément qui a été choisi:
public class MainActivity extends AppCompatActivity { Intent intent; ArrayList<String> artistsTitles; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent=new Intent(getApplicationContext(), PlayerActivity.class); artistsTitles=getArtistTitle(); ListView mainList=(ListView) findViewById(R.id.mainList); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, artistsTitles); mainList.setAdapter(adapter); mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { intent.putExtra("currentSong", position); startActivity(intent); } }); } private ArrayList<String> getArtistTitle() { ContentResolver musicResolve = getContentResolver(); String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; String[] projection = { MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE}; Uri uri=android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor cursor = musicResolve.query(uri, projection, selection, null, null); ArrayList<String> arrayList=new ArrayList<String>(); while(cursor.moveToNext()) arrayList.add(cursor.getString(0)+" - "+cursor.getString(1)); return arrayList; } }
le second (PlayerActivity) présente une liste de tableaux des chemins de chaîne des chansons, et avec un MediaPlayer, joue la chanson ayant l'objet la position et l'accès à l'ArrayList avec elle:
public class PlayerActivity extends AppCompatActivity { ArrayList<String> songs; MediaPlayer mediaPlayer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player); songs=new ArrayList<String>(); songs=getSongs(); String songPath=songs.get(intent.getIntExtra("songID", 0)); mediaPlayer=MediaPlayer.create(getApplicationContext(), Uri.parse(songPath)); try { mediaPlayer.reset(); mediaPlayer.setDataSource(getApplicationContext(), Uri.parse(songPath)); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } private ArrayList<String> getSongs() { ContentResolver musicResolve = getContentResolver(); String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; String[] projection = {MediaStore.Audio.Media.DATA}; Uri uri=android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor cursor = musicResolve.query(uri, projection, selection, null, null); ArrayList<String> s = new ArrayList<String>(); while(cursor.moveToNext()) s.add(cursor.getString(0)); return s; } }
Il fonctionne parfaitement, mais quand je revenir avant la première activité (MainActivity), puis je tape à un autre élément (ou la même), il crée un autre PlayerActivity, donc l'application joue 2 chansons en même temps.
Ma question est, comment puis-je l'implémenter afin qu'il ne crée qu'une seule PlayerActivity?
J'ai vérifié pour singleTask et SingleInstance, mais il fait le même ... – georgenda182
que nous besoin de plus de code de votre activité. Où est votre mediaplayer initialisé, où est placé le chargement de votre chanson, ... – Fusselchen
Le code a été téléchargé! Merci de votre attention. – georgenda182