2010-11-13 11 views
5

मैं एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं जहां मुझे एसडीकार्ड पर उपलब्ध खाली स्थान निर्धारित करने की आवश्यकता है। क्या कोई मुझे इसके बारे में कुछ सुझाव दे सकता है।एंड्रॉइड एप्लिकेशन से एसडीकार्ड पर उपलब्ध खाली स्थान कैसे प्राप्त करें?

धन्यवाद कैसर

उत्तर

5

इस तरह काम करना चाहिए:

File sdcard = Environment.getExternalStorageDirectory(); 
StatFs stat = new StatFs(sdcard.getAbsolutePath()); 
long available = stat.getAvailableBlocks() * (long) stat.getBlockSize(); 
+0

बहुत बहुत धन्यवाद Erich। यह मेरे लिए काम किया। – kaisar

1

आप सटीक परिणाम प्राप्त करने restat करना पड़ सकता है: इस समारोह

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath()); 
stat.restat(Environment.getExternalStorageDirectory().getAbsolutePath()); 
long available = ((long) stat.getAvailableBlocks() * (long) stat.getBlockSize()); 
+0

क्यों एक को बहाल करना चाहिए? मैंने यह सुझाव कहीं और भी देखा लेकिन क्यों कोई स्पष्टीकरण नहीं। –

+0

मुझे पूरी तरह से यकीन नहीं है, लेकिन मुझे लगता है कि ओएस या जेवीएम प्रदर्शन कारणों से इस डेटा को कैश करता है (किसी भी डिस्क आईओ दूर तक, सामान्य प्रसंस्करण धीमा होने वाला है)। एक restat करने के लिए डेटा के ताज़ा ताकत करना। – Merkidemis

0

चेक बाहर

private boolean is_sdCardSaveToUse(){ 

    /**default disk cache size in bytes*/ 
    final int DEFAULT_DISK_CACHE_SIZE = 1024 * 1024 * 10; //10 MB 

    /**get sdCard state*/ 
    String sdCardState = Environment.getExternalStorageState(); 

    /**check if the sdCard is mounted*/ 
    /**check if we can write to sdCard*/if (Environment.MEDIA_MOUNTED.equals(sdCardState)) { 
     if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(sdCardState)) { 
      Log.d("sdCard", "mounted readOnly"); 
     } else { 
      Log.d("sdCard", "mounted readWrite"); 

      /**get free usable space in bytes */ 
      long freeUsableSpace = Environment.getExternalStorageDirectory().getUsableSpace(); 
      int temp = Math.round(((float) freeUsableSpace/1024)/1024); //convert from bytes to MB. 
      Log.d("usableSpace= ", Integer.toString(temp) + " MB"); 

      if (freeUsableSpace > DEFAULT_DISK_CACHE_SIZE){ 
       return true; 
      } else { 
       Log.d("sdCard","not enough space"); 
       return false; 
      } 

     } 

    } else{ 
     Log.d("sdCard","not mounted"); 
     return false; 
    } 

    return false; 
} 
+0

कोड के लिए धन्यवाद, लेकिन क्या कोई विशेष कारण है कि स्टेटफ्स क्लास का उपयोग न करें जो दूसरों के उत्तरों में उपयोग किया जाता है? – Jenix

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