在SongsManager中强行关闭

时间:2016-04-17 14:55:10

标签: android-studio android-mediaplayer media

我正在开发一个简单的媒体播放器应用程序,但在Marshmallow API 23中构建apk时,我的应用程序崩溃了。这是我的代码。

if (home.listFiles(new FileExtensionFilter()).length > 0) {
            for (File file : home.listFiles(new FileExtensionFilter())) {
                HashMap<String, String> song = new HashMap<String, String>();
                song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
                song.put("songPath", file.getPath());

                // Adding each song to SongList
                songsList.add(song);
            }
        }

这是SongsManager的完整代码

package ph.zyber.zybermp;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.HashMap;

public class SongsManager {
    // SDCard Path
    final String MEDIA_PATH = new String("/sdcard/");
    private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

    // Constructor
    public SongsManager(){

    }

    /**
     * Function to read all mp3 files from sdcard
     * and store the details in ArrayList
     * */
    public ArrayList<HashMap<String, String>> getPlayList(){
        File home = new File(MEDIA_PATH);

        if (home.listFiles(new FileExtensionFilter()).length > 0) {
            for (File file : home.listFiles(new FileExtensionFilter())) {
                HashMap<String, String> song = new HashMap<String, String>();
                song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
                song.put("songPath", file.getPath());

                // Adding each song to SongList
                songsList.add(song);
            }
        }
        // return songs list array
        return songsList;
    }

    /**
     * Class to filter files which are having .mp3 extension
     * */
    class FileExtensionFilter implements FilenameFilter {
        public boolean accept(File dir, String name) {
            return (name.endsWith(".mp3") || name.endsWith(".MP3"));
        }
    }
}

我正在学习本教程。

http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/#

请帮帮我。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

在Eclipse中,您需要找到包含音乐的文件夹的路径: Window-Show View-Other-file explorer(手机必须连接到计算机)。

在搜索完整路径的地方,我转过它 - “/ storage / extSdCard / Music”。 我把它放在代码中后就可以了:

final String MEDIA_PATH = new String("/storage/extSdCard/Music");

祝你好运。

答案 1 :(得分:0)

像这样修改SongsManger,你必须在该活动中创建songsmanger的对象期间传递适当活动的上下文

我已经纠正了getplaylist()函数的代码,并且不要忘记在manifest中添加运行时权限 使用对话框检查权限

在包含内容解析程序的每个活动中扩展appcombatActivity

例如:

SongsManager plm = new SongsManager(PlayListActivity.this);

// get all songs from sdcard

this.songsList = plm.getPlayList();
public class SongsManager {

    private ArrayList<hashmap<string, string="">> songsList = new ArrayList<hashmap<string, string="">>();

    Cursor cursor;

    Context context;

    // Constructor

    public SongsManager(Context context){

       this.context = context;

    }

/**

* Function to read all mp3 files from sdcard

* and store the details in ArrayList

* */

public ArrayList<hashmap<string, string="">> getPlayList(){

    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";

    String[] projection = {

    MediaStore.Audio.Media._ID,

    MediaStore.Audio.Media.ARTIST,

    MediaStore.Audio.Media.TITLE,

    MediaStore.Audio.Media.DATA,

    MediaStore.Audio.Media.DISPLAY_NAME,

    MediaStore.Audio.Media.DURATION

    };

ContentResolver contentResolver = context.getContentResolver();

cursor = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,projection, selection,null,null);

while(cursor.moveToNext()) {

    HashMap<string, string=""> song = new HashMap<string, string="">();

    song.put("songID",cursor.getString(0));

    song.put("songTitle",cursor.getString(2));

    song.put("songPath",cursor.getString(3));

    // Adding each song to SongList

    songsList.add(song);

    }

// return songs list array

    return songsList;

  }

}