繁体   English   中英

以更快的方式在SD卡上获取系统铃声和Mp3文件-Android

[英]Get System Ringtones and Mp3 files on SD Card in a quicker way - Android

我正在使用SoundManager类来获取SD卡上的系统铃声(TYPE_ALL)和mp3文件。 我最终使用HashMaps(在活动代码段中)填充列表视图(带有CheckedTextViews),以允许用户选择一种音调(铃声或歌曲)。 该代码有效,我能够使用媒体播放器播放所选的音调。这就是代码。

但是,这需要很多时间 我不知道是因为SongsManager文件还是其他原因。 是否有其他方法可以加快此过程?

SoundManager.java

public class SongsManager {

final String MEDIA_PATH = Environment.getExternalStorageDirectory()
        .getPath() + "/";
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
private String mp3Pattern = ".mp3";
// Constructor
public SongsManager() {

}

/**
 * Function to read all mp3 files and store the details in
 * ArrayList
 * */
public ArrayList<HashMap<String, Ringtone>> getAllSounds(Context context){
    RingtoneManager ringtoneMgr = new RingtoneManager(context);
    ringtoneMgr.setType(RingtoneManager.TYPE_ALL);
    Cursor alarmsCursor = ringtoneMgr.getCursor();
    int alarmsCount = alarmsCursor.getCount();
    if (alarmsCount == 0 && !alarmsCursor.moveToFirst()) {
        return null;
    }
    ArrayList<HashMap<String, Ringtone>> alarms = new ArrayList<HashMap<String, Ringtone>>();
    while(!alarmsCursor.isAfterLast() && alarmsCursor.moveToNext()) {
        int currentPosition = alarmsCursor.getPosition();
        HashMap<String, Ringtone> soundMap = new HashMap<String, Ringtone>();
        Ringtone ringtone = ringtoneMgr.getRingtone(currentPosition);
        soundMap.put("Sound",ringtone);

        alarms.add(soundMap);
    }
    alarmsCursor.close();
    return alarms;
}


 public ArrayList<HashMap<String, String>> getPlayList() {
    System.out.println(MEDIA_PATH);
    if (MEDIA_PATH != null) {
        File home = new File(MEDIA_PATH);
        File[] listFiles = home.listFiles();
        if (listFiles != null && listFiles.length > 0) {
            for (File file : listFiles) {
                System.out.println(file.getAbsolutePath());
                if (file.isDirectory()) {
                    scanDirectory(file);
                } else {
                    addSongToList(file);
                }
            }
        }
    }
    // return songs list array
    return songsList;
}

private void scanDirectory(File directory) {
    if (directory != null) {
        File[] listFiles = directory.listFiles();
        if (listFiles != null && listFiles.length > 0) {
            for (File file : listFiles) {
                if (file.isDirectory()) {
                    scanDirectory(file);
                } else {
                    addSongToList(file);
                }

            }
        }
    }
}

private void addSongToList(File song) {
    if (song.getName().endsWith(mp3Pattern)) {
        HashMap<String, String> songMap = new HashMap<String, String>();
        songMap.put("songTitle",
                song.getName().substring(0, (song.getName().length() - 4)));
        songMap.put("songPath", song.getPath());

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

}

来自MyActivity.java的片段

        SongsManager songsManager = new SongsManager();
        ArrayList<HashMap<String, String>> songsMap = songsManager.getPlayList();
        ArrayList<HashMap<String, Ringtone>> soundMap = songsManager.getAllSounds(getApplicationContext());

将此功能与Android Manifest文件中的“ 外部存储”权限一起使用。

public ArrayList<HashMap<String, String>> getSDCardAudioFiles() {

ArrayList<HashMap<String, String>> audioFilesList = new ArrayList<HashMap<String, String>>();
    Cursor mCursor = getContentResolver().query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            new String[] { MediaStore.Audio.Media.DISPLAY_NAME,
                    MediaStore.Audio.Media.DATA }, null, null, null);

    int count = mCursor.getCount();

    HashMap<String, String> audioFileMap;
    while (mCursor.moveToNext()) {
        audioFileMap = new HashMap<String, String>();
        audioFileMap.put("FileName",mCursor.getString(mCursor
                        .getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)));
        audioFileMap.put("FilePath", mCursor.getString(mCursor
                .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
        audioFilesList.add(audioFileMap);
    }
    mCursor.close();
    return audioFilesList;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM