我想只将游标放到一个文件中。但是怎么样?

时间:2013-11-21 17:27:30

标签: android cursor uri mediastore

我是android新手。我想把光标只到一个文件。但是怎么样?我尝试了这个但是没有用,并且给出了错误。

private void getallaudioFromMySpecialFolder() {   
    String[] star = { "*" };
    String Dir_recordedAudios= Environment.getExternalStorageDirectory()+File.separator+"My Audios"+File.separator;

    File Directory=new File(Dir_recordedAudios);

    Uri u=Uri.fromFile(Directory);

    Uri uri = Uri.parse(u.toString());

    Cursor musiccursor = managedQuery(uri, star,null, null, null);
    if (musiccursor!= null) {
        if (musiccursor.moveToFirst())  {
            do {
                String duration = musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
                String str_duration=CalTotalTime(Integer.valueOf(duration));
                String path= musiccursor.getString(musiccursor.getColumnIndex(MediaStore.Audio.Media.DATA));

                Log.d("************", "**************");
                Log.d("path",path);
                Log.d("totalTime", str_duration);

            } while (musiccursor.moveToNext());
        }

        musiccursor.close();
    }
}

1 个答案:

答案 0 :(得分:1)

我终于找到了解决问题的方法。如果我们想要光标到特殊文件,首先在Projection数组中确定用于投影的文件。我们必须定义想要获取其信息的aur文件。 我们使用" LIKE"选择的词。代码就在这里。太了,我了解到使用CursorLoader更好。因为不推荐使用managedQuery方法。 代码在这里:

String name="";
    String duration="";
    String path="";
    Log.d("Loading file: " + filepath,"");

            // This returns us content://media/external/videos/media (or something like that)
            // I pass in "external" because that's the MediaStore's name for the external
            // storage on my device (the other possibility is "internal")
    Uri audiosUri = MediaStore.Audio.Media.getContentUri("external");

    Log.d("audiosUri = " + audiosUri.toString(),"");

    String[] projection = {MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Audio.Media.DURATION};

    // TODO This will break if we have no matching item in the MediaStore.
    Cursor cursor = managedQuery(audiosUri, projection, MediaStore.Audio.Media.DATA + " LIKE ?", new String[] { filepath }, null);
    cursor.moveToFirst();

    path =cursor.getString( cursor.getColumnIndex(projection[0]));
    name=cursor.getString( cursor.getColumnIndex(projection[1]));
    int iduration = cursor.getColumnIndex(projection[2]);
    duration=CalTotalTime(Integer.valueOf(iduration));
    Log.d("pathhhhhhhhhhhhhhhhhh", path);
    Log.d("nameeeeeeeeeeeeeeeeeeeeeee", name);
    Log.d("duration", duration);

    cursor.close();

这是CursorLoader的形式。可以帮助你。

private String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Audio.Media.DATA };
    CursorLoader loader = new CursorLoader(mContext, contentUri, proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(proj[0]);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}