【问题标题】:Android content provider random orderAndroid 内容提供者随机顺序
【发布时间】:2012-07-04 19:04:22
【问题描述】:

有人能指点我正确的方向吗:

如何以随机顺序提供此查询?

musiccursor = getActivity().getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
musicdata, 
selection,
dirs, 
MediaColumns.DATA+ " asc");

我尝试用各种东西替换“asc”,包括 Random()、RAND....我很难过

【问题讨论】:

    标签: android random uri android-contentprovider


    【解决方案1】:

    选择 25 条随机记录:

    musiccursor = getActivity().getContentResolver().query(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
    musicdata, 
    selection,
    dirs, 
    "RANDOM() LIMIT 25");
    

    这对我有用。

    【讨论】:

    • 啊,太好了,谢谢。我将如何确保将随机数设置为对整个集合足够高?我必须通过它两次吗?。
    • 很高兴您回答了您的其他问题,对于我们的应用程序,我们希望支持随机播放,但不会冒险一次加载大量数据,因此我们一次选择 25 个随机记录,当我们用完时运行另一个选择,如果您正在做类似的事情(随机播放),这样的事情可能是一个不错的选择。
    • 这让伊恩深思。仅仅随机化一个完整列表而不是按照你的方式做的开销是多少?我假设您正在考虑内存使用?
    • 我认为这取决于用户在他们的设备上有多少首歌曲,我担心的是内存使用情况。我在这里假设您正在选择歌曲,如果我错了,请原谅我。
    • 它是一款平板电脑应用。左侧是文件夹列表,中间是文件列表,右侧是播放器控件。我正在改组中间列表,文件。此列表中可能有数千人。
    【解决方案2】:

    为了记录,这就是我实施解决方案的方式:

    if(isShuffle){
    // shuffle is on - play a random song
     sortOrder = "RANDOM()";
     } 
    else{
    sortOrder = MediaColumns.DATA+ " asc";   
    }
    
    ...
    
    //run the query          
    musiccursor = ctx.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
    musicdata, 
    selection,
    dirs,
    sortOrder);
    

    通过这样做,我可以将随机排序的光标扔到列表视图中。用户可以看到随机播放列表顺序,而不是像大多数应用程序那样“秘密”随机选择下一首歌曲。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多