【问题标题】:Find mp3 songs in storage in android在 android 中查找存储中的 mp3 歌曲
【发布时间】:2017-03-05 22:35:39
【问题描述】:

我正在尝试制作一个可以找到所有 mp3 歌曲的应用程序,并且我得到了这个代码,但是我无法测试这个代码,因为它正在崩溃并且没有任何错误,我做错了什么?

我的班级寻找歌曲:

   public class SongsManager {
    private ArrayList<Song> songsList;

    public ArrayList<Song> getMp3Songs(Context ctx) {
        Uri allSongsUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
        Cursor cursor =  ctx.getContentResolver().query(allSongsUri, null, null, null, selection);
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    Song song = new Song(cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID)),
                            cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)),
                            cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)),
                            cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)));
                    songsList.add(song);
                } while (cursor.moveToNext());
            }
            cursor.close();
        }
        return songsList;
    }
}

我的活动:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SongsManager songsManager = new SongsManager();
        ArrayList<Song> songList = songsManager.getMp3Songs(this);
        ArrayAdapter<Song> adapterSongList = new ArrayAdapter<Song>(this, android.R.layout.simple_list_item_1, songList);
        ListView listView = (ListView) findViewById(R.id.musicList);
        listView.setAdapter(adapterSongList);
    }
}

我的歌曲课:

public class Song {
    private long id;
    private String title;
    private String artist;
    private String path;
        public Song(long songID, String songTitle, String songArtist, String songPath) {
        id = songID;
        title = songTitle;
        artist = songArtist;
        path = songPath;
    }
    public long getID(){
        return id;
    }
    public String getTitle(){
        return title;
    }
    public String getArtist(){
        return artist;
    }
    public String getPath(){
        return path;
    }
    public void setTitle(String title_param){
        title = title_param;
    }
    public void setArtist(String artist_param){
        title = artist_param;
    }
    public void setPath(String path_param){
        path = path_param;
    }
    public String toString(){
        return getTitle();
    }
}

【问题讨论】:

  • "因为崩溃了" -- 使用 LogCat 检查与崩溃相关的 Java 堆栈跟踪:stackoverflow.com/questions/23353173/…
  • 这里有些错误:Cursor cursor = ctx.getContentResolver().query(allSongsUri, null, null, null, selection);

标签: android android-studio mediastore


【解决方案1】:

您应用了错误的语法。 “选择”不正确,因为这是排序顺序。

例如:

         private final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
         public Cursor getAllTracks(Context context) {
    // gets all tracks

    ContentResolver cr = context.getContentResolver();
    final String[] columns = {track_id, track_no, artist, track_name,
            album, duration, path, year, composer};
    return cr.query(uri, columns, null, null, null);
} 

来自文档:

    query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

查询给定的 URI,在结果集上返回一个 Cursor。

【讨论】:

  • 你帮了大忙!谢谢
  • de nada, muchos gracias
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多