2016-05-28 13 views
1

Ich versuche, alle Mediendateien von dem Gerät (Internal und SDcard) zu bekommen. Bis jetzt kann ich alle Mediendateien aus einem festen Ordner der SD-Karte .I Ich habe die meisten Webseiten auf mediastore durchgesehen. Und ich kann die Medieninformationen bekommen. Aber wie kann ich alle Audiodateien vom Gerät bekommen? Jedes Beispiel wird hilfreich sein. Ich habe versucht, auf diese Weise `public class SongDto {Wie bekomme ich die Audio-Datei mit Mediastore

public long songId; 
public String songTitle; 
public String songArtist; 
public String path; 
public short genre; 
public long duration; 
public String album; 
public Bitmap albumArt; 

public String toString() { 
return String.format("songId: %d, Title: %s, Artist: %s, Path: %s, Genere: %d, Duration %s", 
     songId, songTitle, songArtist, path, genre, duration); 
} 

und diese Werte in einem anderen Klassennamen bekommen

public class Utils { 
private Context _context; 

// constructor 
public Utils(Context context) { 
    this._context = context; 
} 
public static ArrayList<SongDto> getMusicInfos(Context context) { 

    ArrayList<SongDto> musicInfos = new ArrayList<SongDto>(); 

und jetzt ich versuche die die Liedertitel in einer anderen Klasse

private ArrayList<SongDto> musicInfos; 
private Utils utils; 
private ArrayList<String> songPaths = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    utils = new Utils(this); 
    songPaths = utils. getMusicInfos(songTitle); 
} 

private void update(){ 
    ArrayAdapter<String> list=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,musicInfos.add(songTitle)); 
} 
} 
zu erhalten

Wie bekomme ich nur das gewünschte Array wie Array von SongId, SongArtist, Songdauer. Und wo ich falsch mache. Wie man die getMusicInfos Methodeeinstellen`

+0

Sie können alle Ordner der SD-Karte und dann überprüfen, ob ein Ordner mit Ihrer Mediendatei, wenn es Ihre Datei enthält, als es in Ihre temporäre ARRAYLIST hinzufügen ... Versuchen Sie diese und lassen Sie mich in Fall von Interesse ... http://Stackoverflow.com/a/9531063/3946958 –

+0

Ich möchte die Audiodatei von internen und externen Speicher –

Antwort

2

können Sie versuchen, diese

ArrayList audio=new ArrayList(); 
Cursor c=getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.Media.DISPLAY_NAME}, null, null, null); 


while(c.moveToNext()) 
{ 
String name=c.getString(c.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); 
audio.add(name); 

} 

und in ähnlicher Weise können Sie auch die internel Speicherung von Audiodateien erhalten, indem INTERNEL_CONTENT_URI Angabe

1

ich diesen Code verwendet, um alle Song-Daten zu erhalten

public static ArrayList<SongDto> getMusicInfos(Context context) { 

    ArrayList<SongDto> musicInfos = new ArrayList<SongDto>(); 

    Cursor cursor = context.getContentResolver().query(
      MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, 
      MediaStore.Audio.Media.DEFAULT_SORT_ORDER); 
    if (cursor == null) { 
     return null; 
    } 


    for (int i = 0; i < cursor.getCount(); i++) { 
     cursor.moveToNext(); 


     int isMusic = cursor.getInt(cursor 
       .getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); 

     if (isMusic != 0) { 
      SongDto music = new SongDto(); 


      music.path = cursor.getString(cursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)); 

      if (!new File(music.path).exists()) { 
       continue; 
      } 


      music.songId = cursor.getLong(cursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media._ID)); 

      music.songTitle = cursor.getString(cursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)); 


      music.songTitle = cursor.getString(cursor 
        .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); 


      music.album = cursor.getString(cursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)); 


      music.songArtist = cursor.getString(cursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)); 

      music.duration = cursor 
        .getLong(cursor 
          .getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)); 

      MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
      mmr.setDataSource(music.path); 
      music.albumArt = getBitmap(mmr.getEmbeddedPicture()); 
      mmr.release(); 

      musicInfos.add(music); 
     } 
    } 

    return musicInfos; 
} 

und verwenden Sie dies als Datenobjekt

public class SongDto { 

public long songId; 
public String songTitle; 
public String songArtist; 
public String path; 
public short genre; 
public long duration; 
public String album; 
public Bitmap albumArt; 

public String toString() { 
    return String.format("songId: %d, Title: %s, Artist: %s, Path: %s, Genere: %d, Duration %s", 
      songId, songTitle, songArtist, path, genre, duration); 
} 
} 

AbumArt könnte als null

Um Song-ID als Liste

String[] columns = { MediaStore.Audio.Media._ID }; 
    cursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,columns, null, null, null); 

und bekommen die Daten von Cursor zu holen kommen. Um sowohl interne als auch externe Speicher-Songs zu bekommen, habe ich ab sofort keine Lösung.

+1

bekommen, also muss ich Array-Liste zweimal festlegen, um den externen und internen Song zu erhalten? –

+0

und wie ich die gegebenen Informationen wie sondId in einem Array erhalten kann –

+0

Siehe meine aktualisierte Antwort Neelay. –