Back to project page Alfred4Android.
The source code is released under:
Apache License
If you think the Android project Alfred4Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.toraleap.collimator.ext; //from ww w .j a va 2 s .c o m import java.util.ArrayList; import java.util.List; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteException; import android.net.Uri; import android.provider.MediaStore; import android.provider.MediaStore.Audio; import android.util.Log; /** * ?????????????? * @author uestc.Mobius <mobius@toraleap.com> * @version 2010.1028 */ public final class Playlist { private final ContentResolver mResolver; private final String[] mItems; /** * ?????????????????????????????? */ public Playlist(ContentResolver resolver, String[] items) { mResolver = resolver; mItems = items; } /** * ?????????????????????????????????????????????????????????????????????????????????????? * @param name ??????????? * @return ???????????? */ public int createNew(String name) { long[] ids = toMediaId(); if (ids.length == 0) return 0; removeIfExist(name); ContentValues[] values = new ContentValues[ids.length]; Uri uri = createPlaylist(name); for (int i = 0; i < ids.length; i++) { values[i] = new ContentValues(); values[i].put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(i)); values[i].put(MediaStore.Audio.Playlists.Members.AUDIO_ID, ids[i]); } return mResolver.bulkInsert(uri, values); } /** * ??????????????????????????????????? * @param name ??????????? */ public void removeIfExist(String name) { String whereclause = MediaStore.Audio.Playlists.NAME + " == '" + name.replace("'", "''") + "'"; Cursor cursor = mResolver.query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.Playlists._ID }, whereclause, null, MediaStore.Audio.Playlists.NAME); if (cursor != null && cursor.getCount() > 0) { cursor.moveToFirst(); long id = cursor.getLong(0); mResolver.delete(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, MediaStore.Audio.Playlists._ID + " == " + id, null); } if (cursor != null) cursor.close(); } public PlaylistPair[] getPlaylists() { List<PlaylistPair> list = new ArrayList<PlaylistPair>(); String[] cols = new String[] { MediaStore.Audio.Playlists._ID, MediaStore.Audio.Playlists.NAME }; String whereclause = MediaStore.Audio.Playlists.NAME + " != ''"; Cursor cursor = mResolver.query(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, cols, whereclause, null, MediaStore.Audio.Playlists.NAME); if (cursor != null && cursor.getCount() > 0) { cursor.moveToFirst(); while (! cursor.isAfterLast()) { list.add(new PlaylistPair(cursor.getInt(0), cursor.getString(1))); cursor.moveToNext(); } } if (cursor != null) cursor.close(); return (PlaylistPair[]) list.toArray(); } /** * ????????????????????????????????????? URI?? * @param name ???????????? * @return ???????? URI */ private Uri createPlaylist(String name) { ContentValues values = new ContentValues(); values.put(MediaStore.Audio.PlaylistsColumns.NAME, name); return mResolver.insert(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, values); } /** * ????????????????????????????????????? ID ????? * @return ???? ID ???? */ private long[] toMediaId() { long[] list = new long[mItems.length]; for (int i = 0; i < list.length; i++) list[i] = -1; StringBuffer sb = new StringBuffer(); for (int i = 0; i < mItems.length; i++) { if (i > 0) sb.append(","); // Android 2.1 or earlier sb.append("'").append(mItems[i].replace("'", "''")).append("',"); // Android 2.2 sb.append("'/mnt").append(mItems[i].replace("'", "''")).append("'"); } String where = MediaStore.Audio.AudioColumns.DATA + " IN (" + sb.toString() + ")"; try { Cursor cursor = mResolver.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[] { Audio.AudioColumns._ID, MediaStore.Audio.AudioColumns.DATA }, where, null, null); if (cursor == null) return new long[0]; for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { String data = cursor.getString(1); for (int i = 0; i < mItems.length; i++) { if (data.endsWith(mItems[i])) { list[i] = cursor.getLong(0); break; } } } } catch (SQLiteException e) { Log.e("SQL", e.getMessage()); } return shrinkLongArray(list); } /** * ?????? long ?????????????????? * @param source ???????? * @return ??????????????? */ public long[] shrinkLongArray(long[] source) { int count = 0; for (int i = 0; i < source.length; i++) if (source[i] >= 0) count++; long[] result = new long[count]; count = 0; for (int i = 0; i < source.length; i++) if (source[i] >= 0) result[count++] = source[i]; return result; } public class PlaylistPair { private long mId; private String mName; public PlaylistPair(int id, String name) { mId = id; mName = name; } public long getId() { return mId; } public String getName() { return mName; } } }