2016-02-09 4 views
0

Я пытаюсь разработать простой музыкальный плеер, я использую Content Resolver вместе с URI и Cursor, чтобы найти все музыкальные форматы на Android-устройстве.Почему контент Resolver находит удаленные аудиофайлы в android

Но во время тестирования я понял, что даже после удаления песни с устройства они все еще находятся в песнях array!.

Вот код для обхода устройства для аудиофайлов:

  ContentResolver musicResolver = getContentResolver(); 
      Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
      Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null); 


     if(musicCursor!=null && musicCursor.moveToFirst()){ 
      //get columns 

      int songArtist = musicCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST); 
      int songName = musicCursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME); 
      int songAlbum = musicCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM); 
      int songDuration = musicCursor.getColumnIndex(MediaStore.Audio.Media.DURATION); 
      int songSource = musicCursor.getColumnIndex(MediaStore.Audio.Media._ID); 
      int source = musicCursor.getColumnIndex(MediaStore.Audio.Media.DATA);//not used yet 

//   int gg = musicCursor.getColumnIndex(MediaStore.I) 

      //add songs to list 
      do { 
       long id = musicCursor.getLong(songSource); 
       String paths = musicCursor.getString(source); 
       String title = musicCursor.getString(songName); 
       String artist = musicCursor.getString(songArtist); 
       String album = musicCursor.getString(songAlbum); 
       long duration = musicCursor.getLong(songDuration); 

       songs.add(new Song(id, title, artist, album, duration, paths)); 
      } 
      while (musicCursor.moveToNext()); 
     } 

А вот класс песни, которые несут каждый детали песни:

package andy.propaganda; 
import java.io.Serializable; 

public class Song implements /*Parcelable*/ Serializable { 

    private String album; 
    private String author; 
    private String artist; 
    private String name; 
    private long dataSource; 
    private long duration; 
    private String genre; 
    private String bitRate; 
    private byte[] image; 

    public Song(){ 
     image = null; 
    } 

    public Song(long id, String name, String artist, String album, long duration, String tmp){ 
     this.album = album; 
     this.name = name; 
     this.artist = artist; 
     this.duration = duration; 
     this.dataSource = id; 
     image = null; 
     this.bitRate = tmp; 
    } 

    public String getArtist() { 
     return artist; 
    } 

    public void setArtist(String artist) { 
     this.artist = artist; 
    } 

    public String getAuthor() { 
     return author; 
    } 

    public void setAuthor(String author) { 
     this.author = author; 
    } 

    public String getAlbum() { 
     return album; 
    } 

    public void setAlbum(String album) { 
     this.album = album; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public long getDataSourse() { 
     return dataSource; 
    } 

    public void setDataSourse(long dataSource) { 
     this.dataSource = dataSource; 
    } 

    public String getGenre() { 
     return genre; 
    } 

    public void setGenre(String genre) { 
     this.genre = genre; 
    } 

    public String getBitRate() { 
     return bitRate; 
    } 

    public void setBitRate(String bitRate) { 
     this.bitRate = bitRate; 
    } 

    public byte[] getImage() { 
     return image; 
    } 

    public void setImage(byte[] image) { 
     this.image = image; 
    } 

    public long getDuration() { 
     return duration; 
    } 

    public void setDuration(long duration) { 
     this.duration = duration; 
    } 

} 

ответ

1

При удалении файла, нужно для сканирования его MediaScannerConnection. Затем удаление файла получить фактически отражено в вашем следующем запросе через ContentResolver

Например, для удаления mp3 файл такой линии будет делать трюк: MediaScannerConnection.scanFile(getContext(), new String[]{file.getPath()}, new String[]{"mp3/*"}, null);

 Смежные вопросы

  • Нет связанных вопросов^_^