求助!在Android平台下开发音乐播放器,怎样让系统自动扫描加载歌曲的时候扫描指定文件夹(因为好多.mp3格式的不仅仅是歌曲,也有可能是游戏中自带声音之类的),还有下载歌曲的时候怎样下载到指定文件夹?

解决方案 »

  1.   

    private static final String[] INTERNAL_COLUMNS = new String[] {
            MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE,
            "\"" + MediaStore.Audio.Media.INTERNAL_CONTENT_URI + "\"",
            MediaStore.Audio.Media.TITLE_KEY
        };private static String constructBooleanTrueWhereClause(List<String> columns) {
            
            if (columns == null) return null;
            
            StringBuilder sb = new StringBuilder();
            for (int i = columns.size() - 1; i >= 0; i--) {
                sb.append(columns.get(i)).append("=1 or ");
            }
            
            if (columns.size() > 0) {
                // Remove last ' or '
                sb.setLength(sb.length() - 4);
            }
            
            return sb.toString();
        }    private Cursor query(Uri uri,
                String[] projection,
                String selection,
                String[] selectionArgs,
                String sortOrder) {
            /*if (mContext != null) {
                return ((Activity)mContext).managedQuery(uri, projection, selection, selectionArgs, sortOrder);
            } else {*/
                return mContext.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
            //}
        }    private Cursor getInternalRingtones() {
            return query(
                    MediaStore.Audio.Media.INTERNAL_CONTENT_URI, INTERNAL_COLUMNS,
                    constructBooleanTrueWhereClause(mFilterColumns),
                    null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
        }    protected Cursor getCursor() {
            if (mCursor != null) {
                return mCursor;
            }
            
            final Cursor internalCursor = getInternalRingtones();
            
            if(null == internalCursor)
            {
             return null;
            }
            
            return mCursor = new SortCursor(new Cursor[] { internalCursor, null, null },
                    MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
        }获取的cursor里面就有歌曲了
    return mCursor = new SortCursor(new Cursor[] { internalCursor, null, null },
                    MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
    这个里面的两个null分别对应不同地方的歌曲。具体哪个对应哪个不记得了,比如说第一个是system下面的,第二个是sdcard上面的等等。
      

  2.   

    非常感谢,现在又遇到了一个问题,在查找文件时
     Cursor c = this.getContentResolver()
             .query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
             new String[]{MediaStore.Audio.Media.TITLE,
    MediaStore.Audio.Media.DURATION,
    MediaStore.Audio.Media.ARTIST,
    MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.DISPLAY_NAME },
             null, null, null);
    中,当时写的代码是这个类继承了Activity,而现在我是继承了Fragment(public class ListFragment extends Fragment)然后getContentResolver就不能用this调用了,有没有什么方法可以实现正确的代码?本人是初学不太明白