نمایش اطلاعات کارت حافظه در اندروید

چهارشنبه 12 اسفند 1394

در این مقاله قصد داریم در مورد چگونگی به دست آوردن اطلاعات کارت حافظه مانند کل اطلاعات که داخل حافظه را پر کرده است و چه مقدار از فضا در حافظه خالی است را نمایش دهیم.

نمایش اطلاعات کارت حافظه در اندروید

این اطلاعات که ما از کارت حافظه به دست می آوریم می تواند مفید واقع شود که چه قدر اطلاعات داخل فضای حافظه قرار دارد و چه قدر اطلاعات می توان داخل کارت حافظه قرار داد. در این مقاله ما یک نمونه قرار داده ایم که با اندروید 2.1 کار می کند و روی شبیه ساز و دستگاه واقعی هم جواب خواهد داد.

ابتدا در این کد حافظه ی گوشی را چک می کند که آیا گوشی مورد نظر به کارت SD متصل شده است یا نه اگر گوشی کارت حافظه داشت مقدار فضای اشغالی را چک می نماید و مقدارها را با ارزش GB,KB,MB به ما بر می گرداند.

داخل لایه ی activity خود قطعه کد مورد نظر را قرار دهید:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:typeface="normal" android:textStyle="bold" android:textSize="15dip" android:id="@+id/state"></TextView>
    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/info" android:layout_marginTop="4dip"></TextView>
</LinearLayout>

برای کلاس جاوا قطعه کد زیر را قرار دهید:

import java.text.NumberFormat;  
  
import android.app.Activity;  
import android.graphics.Color;  
import android.os.Bundle;  
import android.os.Environment;  
import android.os.StatFs;  
import android.widget.TextView;  
  
public class SDcardInfoActivity extends Activity   
{  
    //the statistics of the SD card  
    private StatFs stats;  
    //the state of the external storage  
    private String externalStorageState;  
      
    //the total size of the SD card  
    private double totalSize;  
    //the available free space  
    private double freeSpace;  
      
    //a String to store the SD card information  
    private String outputInfo;  
    //a TextView to output the SD card state  
    private TextView tv_state;  
    //a TextView to output the SD card information  
    private TextView tv_info;  
      
    //set the number format output  
    private NumberFormat numberFormat;  
          
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState)   
    {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        //initialize the Text Views with the data at the main.xml file  
        tv_state = (TextView)findViewById(R.id.state);  
        tv_info = (TextView)findViewById(R.id.info);  
          
        //get external storage (SD card) state  
        externalStorageState = Environment.getExternalStorageState();  
          
        //checks if the SD card is attached to the Android device   
        if(externalStorageState.equals(Environment.MEDIA_MOUNTED)  
                || externalStorageState.equals(Environment.MEDIA_UNMOUNTED)  
                || externalStorageState.equals(Environment.MEDIA_MOUNTED_READ_ONLY))  
        {  
            //obtain the stats from the root of the SD card.  
            stats = new StatFs(Environment.getExternalStorageDirectory().getPath());  
              
            //Add 'Total Size' to the output string:  
            outputInfo = "\nTotal Size:\n";  
              
            //total usable size  
            totalSize = stats.getBlockCount() * stats.getBlockSize();  
              
            //initialize the NumberFormat object  
            numberFormat = NumberFormat.getInstance();  
            //disable grouping  
            numberFormat.setGroupingUsed(false);  
            //display numbers with two decimal places  
            numberFormat.setMaximumFractionDigits(2);   
              
            //Output the SD card's total size in gigabytes, megabytes, kilobytes and bytes  
            outputInfo += "Size in gigabytes: " + numberFormat.format((totalSize / (double)1073741824)) + " GB \n"  
            + "Size in megabytes: " + numberFormat.format((totalSize / (double)1048576)) + " MB \n"   
            + "Size in kilobytes: " + numberFormat.format((totalSize / (double)1024)) + " KB \n"   
            + "Size in bytes: " +  numberFormat.format(totalSize) + " B \n";   
              
            //Add 'Remaining Space' to the output string:  
            outputInfo += "\nRemaining Space:\n";  
              
            //available free space  
            freeSpace = stats.getAvailableBlocks() * stats.getBlockSize();  
              
            //Output the SD card's available free space in gigabytes, megabytes, kilobytes and bytes  
            outputInfo += "Size in gigabytes: " + numberFormat.format((freeSpace / (double)1073741824)) + " GB \n"  
            + "Size in megabytes: " + numberFormat.format((freeSpace / (double)1048576)) + " MB \n"   
            + "Size in kilobytes: " + numberFormat.format((freeSpace / (double)1024)) + " KB \n"  
            + "Size in bytes: " + numberFormat.format(freeSpace) + " B \n";   
              
            //output the SD card state  
            tv_state.setTextColor(Color.GREEN);  
            tv_state.setText("SD card found! SD card is " + externalStorageState +".");  
              
            //output the SD card info  
            tv_info.setText(outputInfo);  
        }  
        else //external storage not found  
        {  
            //output the SD card state  
            tv_state.setTextColor(Color.RED);  
            tv_state.setText("SD card not found! SD card state is \"" + externalStorageState + "\".");  
        }  
    }  
} 

در activity بالا 8 متغییر تعریف شده است، که این متغییر در مورد وضعیت اطلاعات ذخیره شده تعریف شده است.

دو متغییر double هم تعریف می نماییم که این دو متغییر یکی برای تعریف کل حافظه است و دیگری برای تعریف مقدار حافظه ی خالی است.

در متد oncreate  شی ها دو textview هستند، ما از یک متد به نام Environment.getexternalstoragestate که مقدار حافظه ی اصلی را بر می گرداند، که داخل آن مقدار اطلاعات نصب شده و نصب نشده و اطلاعات خواندنی را بر می گرداند، و حافظه ای که در گوشی استفاده کرده ایم را چک می نماید و میزان اطلاعات را برای ما بازیابی می نماید.

شی stats حافظه ی خارجی را به صورت پارامتر به مسیر اصلی سازنده ی stats ارسال می نماید، شی stats همه ی اطلاعات را در sd کارت ذخیره می نماید، برای به دست آوردن مجموع کل حافظه ی خارجی ضرب مجموع شماره بلوک با اندازه ی بلوک محاسبه می شود و این مقدار در حجم کل ذخیره می شود.

یک numberformat تعریف می نماییم که این فرمت برای نمایش اطلاعات ذخیره شده استفاده خواهد شد،

به عنوان مثال برای نمایش مقدار فضای ذخیره شده به صورت 1.33218304E9 GB. با استفاده از تعریف این متغییر می توان دو رقم اعشار آن را برداشت و با دو رقم اعشار آن را نمایش داد.

جمع حافظه ی کلی به صورت بایت نمایش داده می شود با استفاده از یک تبدیل مورد نظر می توانید این مقدار که به صورت بایت است به مگا،کیلو،گیگا بایت تبدیل نمایید، بعد از تبدیل کردن مقادیر مقدارها داخل یک متغییر ذخیره می شود.

برای به دست آورن فضای خالی حافظه به جای ضرب بلوک تعداد کل با اندازه بلوک به صورت پیش فرض تعداد بلوک در دسترس را با تعداد کل بلوک ضرب می شود و این مقدار در یک متغییر به نام freespace ذخیره می شود.

برای به دست آوردن freespace مقدار مورد نظر را به kb,GB,MB تبدیل می نماید و در متغییر مربوطه ذخیره می کنید.

حالا برای نمایش نتیجه ی مورد نظر ما از یک textview استفاده می نماییم که مقادیر محاسبه شده را داخل این textview قرار می دهیم برای این textview مورد نظر هم باید if تعریف نمایید که اگر کارت حافظه را پیدا کرد مقدار فضای مورد نظر را نمایش دهد و اگر کارت حافظه را پیدا نکرد داخل همان textview مورد نظر یک پیغام برای آن قرار دهد.

خروجی به صورت زیر خواهد بود:

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید