2012-07-19 28 views
12

मैं केवल बाल्टी (एल्बम) का नाम पुनर्प्राप्त करना चाहता हूं। जैसे कैमरा, डाउनलोड इत्यादि, लेकिन सभी फ़ोटो से कैमरा, डाउनलोड इत्यादि की सूची नहीं है, इसलिए मैं प्रत्येक बाल्टी नाम के लिए प्रत्येक पंक्ति को कैसे प्राप्त करूं?एंड्रॉइड: बाल्टी नाम की सूची कैसे पूछें

गैलरी एप्लिकेशन में मेरा क्या मतलब है, आपके पास एल्बम पहले हैं उदा। कैमरा। जब आप उस पर क्लिक करते हैं, तो यह कैमरे की सभी तस्वीरें दिखाता है।

मैं क्वेरी के कहां के साथ कैमरा रोल में फ़ोटो पूछ सकता हूं। लेकिन क्या होगा यदि मैं केवल एल्बमों के नाम का नाम चाहता हूं, न कि फ़ोटो, क्या यह पूछना संभव है? अगर मैं सभी तस्वीरें पूछता हूं और तस्वीरों के प्रति सेट केवल एक पंक्ति लेता हूं, तो यह समय लेने वाला होगा।

कृपया मदद

उत्तर

-1

आप इसके लिए MediaStore.Images.Media.BUCKET_DISPLAY_NAME क्वेरी कर सकते हैं। पीटर Knego sent a good example. यह एक अच्छा उदाहरण है और आप queryQuery() को क्वेरीक्वायर ऑब्जेक्ट से क्वेरी() का उपयोग कर प्रबंधित कर सकते हैं, बजाय प्रबंधितQuery() जो बहिष्कृत है।

// which image properties are we querying 
String[] projection = new String[]{ 
     MediaStore.Images.Media._ID, 
     MediaStore.Images.Media.BUCKET_DISPLAY_NAME, 
     MediaStore.Images.Media.DATE_TAKEN 
}; 

// Get the base URI for the People table in the Contacts content provider. 
Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 

// Make the query. 
ContentResolver cr = getContentResolver(); 
Cursor cur = cr.query(images, 
     projection, // Which columns to return 
     "",   // Which rows to return (all rows) 
     null,  // Selection arguments (none) 
     ""   // Ordering 
     ); 

Log.i("ListingImages"," query count="+cur.getCount()); 

if (cur.moveToFirst()) { 
    String bucket; 
    String date; 
    int bucketColumn = cur.getColumnIndex(
     MediaStore.Images.Media.BUCKET_DISPLAY_NAME); 

    int dateColumn = cur.getColumnIndex(
     MediaStore.Images.Media.DATE_TAKEN); 

    do { 
     // Get the field values 
     bucket = cur.getString(bucketColumn); 
     date = cur.getString(dateColumn); 

     // Do something with the values. 
     Log.i("ListingImages", " bucket=" + bucket 
       + " date_taken=" + date); 
    } while (cur.moveToNext()); 

} 
+0

अच्छा है लेकिन मैं केवल बार-बार बाल्टी डिस्प्ले नाम की सूची के बजाय अद्वितीय बाल्टी डिस्प्ले नाम पूछना चाहता हूं। जैसे मैं कैमरा और प्रतिस्पर्धा एल्बम की तरह कुछ करना चाहता हूँ। लेकिन आपके नमूना कोड के लिए यह कैमरा, कैमरा, कैमरा, प्रतिस्पर्धा, प्रतिस्पर्धा आदि जैसे कुछ प्रदर्शित करेगा – LittleFunny

+1

हाँ! मैंने प्रत्येक तत्व को हैश मैप में कुंजी के रूप में जोड़कर हल किया। यह थोड़ा परेशान है लेकिन यह काम करता है। –

+0

अभी भी समस्या को सही तरीके से हल नहीं करता है - आपके पास दो अद्वितीय फ़ोल्डर्स हो सकते हैं जिनके पास एक ही प्रदर्शन नाम है और अलग-अलग फ़ोटो हैं। BUCKET_IT हैश के लिए कुंजी होने की आवश्यकता है - नाम प्रदर्शित नहीं करें। –

22

मैं एक ही समस्या है और यहाँ मेरे समाधान (गैलरी स्रोत कोड का पता लगाने के बाद) एल्बम का नाम है और यह में पहली छवि (इस एल्बम के लिए झलक के रूप में उपयोग कर सकते हैं) प्राप्त करने के लिए है:

(नोट कि बाल्टी दोहराने GroupBy & आदेश तकनीक द्वारा हटा दिया जाता)

// which image properties are we querying 
    String[] PROJECTION_BUCKET = { 
      ImageColumns.BUCKET_ID, 
      ImageColumns.BUCKET_DISPLAY_NAME, 
      ImageColumns.DATE_TAKEN, 
      ImageColumns.DATA}; 
    // We want to order the albums by reverse chronological order. We abuse the 
    // "WHERE" parameter to insert a "GROUP BY" clause into the SQL statement. 
    // The template for "WHERE" parameter is like: 
    // SELECT ... FROM ... WHERE (%s) 
    // and we make it look like: 
    // SELECT ... FROM ... WHERE (1) GROUP BY 1,(2) 
    // The "(1)" means true. The "1,(2)" means the first two columns specified 
    // after SELECT. Note that because there is a ")" in the template, we use 
    // "(2" to match it. 
    String BUCKET_GROUP_BY = 
      "1) GROUP BY 1,(2"; 
    String BUCKET_ORDER_BY = "MAX(datetaken) DESC"; 

    // Get the base URI for the People table in the Contacts content provider. 
    Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 

    Cursor cur = getContentResolver().query(
      images, PROJECTION_BUCKET, BUCKET_GROUP_BY, null, BUCKET_ORDER_BY); 

    Log.i("ListingImages"," query count=" + cur.getCount()); 

    if (cur.moveToFirst()) { 
     String bucket; 
     String date; 
     String data; 
     int bucketColumn = cur.getColumnIndex(
       MediaStore.Images.Media.BUCKET_DISPLAY_NAME); 

     int dateColumn = cur.getColumnIndex(
       MediaStore.Images.Media.DATE_TAKEN); 
     int dataColumn = cur.getColumnIndex(
       MediaStore.Images.Media.DATA); 

     do { 
      // Get the field values 
      bucket = cur.getString(bucketColumn); 
      date = cur.getString(dateColumn); 
      data = cur.getString(dataColumn); 

      // Do something with the values. 
      Log.i("ListingImages", " bucket=" + bucket 
        + " date_taken=" + date 
        + " _data=" + data); 
     } while (cur.moveToNext()); 
    } 
+1

बाल्टी में कोई फोटो कैसे प्राप्त करें? –

+0

पता नहीं है लेकिन मुझे 5.0 पर किसी भी विचार पर डुप्लिकेट प्रविष्टियां मिल रही हैं? – ingsaurabh

+0

@ क्रुनल शाह मैं प्रत्येक बाल्टी के लिए एक और क्वेरी चलाने की कोशिश करता हूं जो कि पैरामीटर में BUCKET_ID पर फ़िल्टर करता है। – stwienert

6

ये रहा। यह मेरे लिए काम करता है:

Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
    String[] projection = new String[]{ 
      MediaStore.Images.Media.BUCKET_ID, 
      MediaStore.Images.Media.BUCKET_DISPLAY_NAME, 
      MediaStore.Images.Media.DATE_TAKEN, 
      MediaStore.Images.Media.DATA 
    }; 

    String BUCKET_ORDER_BY = MediaStore.Images.Media.DATE_MODIFIED + " DESC"; 
    String BUCKET_GROUP_BY = "1) GROUP BY 1,(2"; 
    Cursor imagecursor = managedQuery(images, 
      projection, // Which columns to return 
      BUCKET_GROUP_BY,  // Which rows to return (all rows) 
      null,  // Selection arguments (none) 
      BUCKET_ORDER_BY  // Ordering 
      ); 

    this.imageUrls = new ArrayList<String>(); 
    this.imageBuckets = new ArrayList<String>(); 
    for (int i = 0; i < imagecursor.getCount(); i++) 
    { 
     imagecursor.moveToPosition(i); 
     int bucketColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME); 
     String bucketDisplayName = imagecursor.getString(bucketColumnIndex); 
     imageBuckets.add(bucketDisplayName); 
     int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA); 
     imageUrls.add(imagecursor.getString(dataColumnIndex)); 

    } 

imageBuckets ArrayList युक्त है एल्बम नामों

imageUrls आप झलक के रूप में उपयोग कर सकते हैं ArrayList एल्बम के अंतिम modifided छवि के पथ युक्त है

+0

बाल्टी में फोटो कैसे प्राप्त करें? –

-1

नीचे के रूप में क्वेरी में प्रक्षेपण कार्य करें:

String bucketProjection[] = {"Distinct "+ MediaStore.Images.Media.BUCKET_DISPLAY_NAME}; 
+0

प्रदर्शन नाम एक अद्वितीय पहचानकर्ता नहीं है (आपके पास एक ही नाम के साथ दो अलग-अलग फ़ोल्डर हो सकते हैं) - BUCKET_ID अद्वितीय है। यदि आप अद्वितीय "फ़ोल्डर" की एक सूची चाहते हैं, तो आप दो समान नामों को एक जैसा मानते हैं - क्योंकि दो समान नामित बाल्टी में अलग-अलग छवियां हैं। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^