Ainsi j'essaye de construire une application de joueur de musique dans android où la liste des chansons est montrée dans un listview fait sur commande. Cette listview personnalisée contient (custom_list_view.xml):MediaPlayer énumérant des chansons dans la liste personnalisée
- ImageView pour l'art de l'album
- TextView pour le titre de la chanson
- TextView pour la durée de la chanson
J'ai créé une classe java (SongDetails. java) qui définit et obtient ces attributs d'une chanson.
J'ai créé une classe d'adaptateur (CustomAdapter.java) en étendant la classe ArrayAdapter.
La MainActivity.java classe initialise le CustomAdapter et le fichier avtivity_main.xml a un ListView pour afficher les chansons
Dans la classe MainActivty.java, selon la méthode addSongs(), je l'ai demandé AlbumArt. Je voulais afficher des pochettes d'album pour chaque chanson de la liste. Mais cette ligne jette une exception. Je suppose que c'est parce que le nombre d'albums et le nombre de chansons sur l'appareil sont inégaux, ce qui provoque une exception. Comment puis-je ajouter des pochettes d'album pour chaque chanson dans le listview
Voici la classe MainActivity.java
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{
private ListView songsList;
private ArrayList<String> myList = new ArrayList<String>();
private final int MY_PERMISSION_REQUEST_READ_EXTERNAL_STORAGE = 1;
private ArrayAdapter<String> arrayAdpt;
private ArrayList<String> filepath = new ArrayList<String>();
private ArrayList<String> filename = new ArrayList<String>();
private ArrayList<SongDetails> songDetailsArrayList = new ArrayList<SongDetails>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
songsList = (ListView)findViewById(R.id.songs_list_view);
seekPermissions();
}
public void seekPermissions() {
if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSION_REQUEST_READ_EXTERNAL_STORAGE);
return;
}
addSongs();
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch(requestCode) {
case MY_PERMISSION_REQUEST_READ_EXTERNAL_STORAGE:
{
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
addSongs();
}
else {
seekPermissions();
}
return;
}
}
}
public void addSongs() {
String[] requestColumns = {MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Albums.ALBUM_ART,};
Cursor cur = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, requestColumns, null, null, null);
int name = cur.getColumnIndex(MediaStore.Audio.Media.TITLE);
int length = cur.getColumnIndex(MediaStore.Audio.Media.DURATION);
int path = cur.getColumnIndex(MediaStore.Audio.Media.DATA);
int albart = cur.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART);
SongDetails mySongDetails;
cur.moveToFirst();
while(!cur.isAfterLast()) {
mySongDetails = new SongDetails(cur.getString(name), cur.getInt(albart), cur.getInt(length));
mySongDetails.setSongDuration(cur.getInt(length));
myList.add(cur.getString(name)+"\t"+cur.getInt(length));
filepath.add(cur.getString(path));
mySongDetails.setSongTitle(cur.getString(name));
filename.add(cur.getString(name));
mySongDetails.setAlbumArt(cur.getInt(albart));
songDetailsArrayList.add(mySongDetails);
cur.moveToNext();
}
songsList.setAdapter(new CustomAdapter(this, songDetailsArrayList));
}
}
Avez-vous ajouté l'autorisation dans le fichier manifeste? –
C'était tout. Je vous remercie. Pourriez-vous également m'aider à ajouter des pochettes d'album pour chaque chanson de la liste de lecture. Si vous remarquez que j'ai demandé la pochette d'album dans la classe MainActivity.java dans la méthode addSongs(). Mais l'application jette une exception. Je suppose que c'est parce que le nombre de pochettes d'albums et le nombre de chansons sur l'appareil sont inégaux, provoquant des exceptions. S'il vous plaît dites-moi comment ajouter une pochette d'album pour chaque chanson –