2011-11-01 6 views
10

का उपयोग कर मैं मीडिया आधारित सूचीदृश्य के लिए आइटम लौटने के लिए कर्सर का उपयोग करता हूं। मैं केवल उन वस्तुओं को वापस करना चाहता हूं जो एक विशिष्ट फ़ोल्डर में हैं।क्वेरी मीडियास्टोर कर्सर विशिष्ट फ़ोल्डर

के रूप में इस कर्सर बंद MediaStore.Audio.Media.DATA आधारित है यह, मेरे गाने के सूची के लिए काम करता है, और मैं इस कर्सर में फ़ोल्डर के लिए जाँच कर सकते हैं: के लिए मेरे सूचीदृश्य में

final String folder = "'" + (new MyPrefs(this.PREF_PATH)).getString("music_folder",null) + "%'"; 

    audioCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mCursorCols, 
      MediaStore.Audio.Media.DATA + " LIKE " + folder, null,MediaColumns.TITLE + " COLLATE LOCALIZED ASC"); 
    startManagingCursor(audioCursor); 

हालांकि,

audioCursor = getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, cols, 
      null, null,AudioColumns.ARTIST + " COLLATE LOCALIZED ASC"); 
     startManagingCursor(audioCursor);  

किसी को भी मेरे साथ MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI लगाने और उन्हें केवल अपने विशिष्ट फ़ोल्डर लौटने के लिए एक अच्छा विधि का हिस्सा बता सकते हैं: कलाकारों, डेटा परिणाम के खिलाफ जांच करने के लिए उपलब्ध नहीं है? मुझे कलाकार यूआरआई का उपयोग करने की आवश्यकता है क्योंकि मैं NUMBER_OF_TRACKS कॉलम का उपयोग करता हूं, जो नियमित मीडिया यूआरआई में उपलब्ध नहीं है।

उत्तर

4

आप रटना कर सकते हैं अपने चयन में जो कुछ भी आप चाहते हैं की तरह इस उप-चुनिंदा उदाहरण के लिए - जो आपकी समस्या का समाधान करना चाहिए:

// The folder needs to end with the % wildcard or stuff doesn't work properly. 
String folder = "/mnt/sdcard/Music/Some Folder/"; 
folder = folder + "%"; 
String where = Artists._ID + " IN (SELECT " + Media.ARTIST_ID + " FROM audio WHERE " + 
    Media.DATA + " LIKE ?)"; 
String[] whereArgs = new String[]{folder}; 
audioCursor = getContentResolver().query(MediaStore.Audio.Artist.EXTERNAL_CONTENT_URI, 
    cols, where, whereArgs, AudioColumns.ARTIST + " COLLATE LOCALIZED ASC");