【问题标题】:How to Check Internal Memory Storage count in android?如何检查android中的内部存储器存储计数?
【发布时间】:2013-03-20 07:41:02
【问题描述】:

我想在我的应用程序中获取内存和进度条中的已用内存,如下图所示。如何应用请帮助我自定义 android 中使用的进度条。我使用了下载应用程序。

【问题讨论】:

  • 您尝试过通常的进度条和两个不同边对齐的文本视图吗?
  • 是的,我想在进度条中显示 2 个文本视图。

标签: android download progress-bar custom-controls


【解决方案1】:

实现方法如下:
TestActivity.java:

public class TestActivity extends Activity {

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final TextView occupiedSpaceText = (TextView)findViewById(R.id.occupiedSpace);
        final TextView freeSpaceText = (TextView)findViewById(R.id.freeSpace);
        final ProgressBar progressIndicator = (ProgressBar)findViewById(R.id.indicator);
        final float totalSpace = DeviceMemory.getInternalStorageSpace();
        final float occupiedSpace = DeviceMemory.getInternalUsedSpace();
        final float freeSpace = DeviceMemory.getInternalFreeSpace();
        final DecimalFormat outputFormat = new DecimalFormat("#.##");

        if (null != occupiedSpaceText) {
            occupiedSpaceText.setText(outputFormat.format(occupiedSpace) + " MB");
        }

        if (null != freeSpaceText) {
            freeSpaceText.setText(outputFormat.format(freeSpace) + " MB");
        }

        if (null != progressIndicator) {
            progressIndicator.setMax((int) totalSpace);
            progressIndicator.setProgress((int)occupiedSpace);
        }
    }

    /**
     * From question http://stackoverflow.com/questions/2652935/android-internal-phone-storage by Lazy Ninja
     */
    public static class DeviceMemory {

        public static float getInternalStorageSpace() {
            StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath());
            //StatFs statFs = new StatFs("/data");
            float total = ((float)statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
            return total;
        }

        public static float getInternalFreeSpace() {
            StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath());
            //StatFs statFs = new StatFs("/data");
            float free  = ((float)statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
            return free;
        }

        public static float getInternalUsedSpace() {
            StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath());
            //StatFs statFs = new StatFs("/data");
            float total = ((float)statFs.getBlockCount() * statFs.getBlockSize()) / 1048576;
            float free  = ((float)statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1048576;
            float busy  = total - free;
            return busy;
        }
    }
}

布局/main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">


    <ProgressBar
        android:id="@+id/indicator"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:progressDrawable="@drawable/memory_indicator_progress" />

    <TextView
        android:id="@+id/occupiedSpace"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:gravity="left"
        android:layout_marginLeft="5dp"
        android:textColor="@android:color/black"
        android:textStyle="bold" />
    <TextView
            android:id="@+id/freeSpace"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:gravity="right"
            android:layout_marginRight="5dp"
            android:textColor="@android:color/black"
            android:textStyle="bold" />
</RelativeLayout>

drawable/memory_indicator_progress.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/holo_green_light" />
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape android:shape="rectangle">
                <solid android:color="@android:color/darker_gray" />
            </shape>
        </clip>
    </item>

</layer-list>

我不确定它是否正是您要寻找的东西,但在我的 xperia v 和 4.1 android 上,我得到以下图片:

由于平台不同,您的设备颜色可能会有所不同。

【讨论】:

  • 感谢 Sandrstar 的回复,我会检查的。
【解决方案2】:

使用android.os.Environment找到内部目录,然后使用android.os.StatFs调用Unix statfs系统调用就可以了。来自 Android 设置应用的无耻 stolen

File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(this, availableBlocks * blockSize);

来自this answer

【讨论】:

  • 感谢您的回复!!但是如何在 android.used 记忆颜色和进度栏中的可用记忆颜色中设置文本进度条如何可能请帮助我!!!
猜你喜欢
  • 2018-07-11
  • 2012-07-18
  • 2013-01-16
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
相关资源
最近更新 更多