2011-01-25 10 views
11

上のすべての合計と使用可能なスペースを取得、Android上で、そこにあるいくつかの携帯電話上のアプリケーションやキャッシュ 私の知る限りではAndroidの

  • 内蔵SDカード(取り外し不可)
  • ため

    • 内蔵メモリは音楽、写真(取り外し可能)私は、彼らが存在することを確認して、それぞれの合計と利用可能なを取得するにはどうすればよい

    用の外付けSDカードは

    (一部の携帯電話は、内蔵SDカードを持っていません)

    ここおかげ

  • 答えて

    32

    を使用すると、内部ストレージのサイズを取得する方法である:ここでは

    StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());   
    long blockSize = statFs.getBlockSize(); 
    long totalSize = statFs.getBlockCount()*blockSize; 
    long availableSize = statFs.getAvailableBlocks()*blockSize; 
    long freeSize = statFs.getFreeBlocks()*blockSize; 
    

    を使用すると、外部ストレージサイズ(SDカードサイズ)を取得する方法である:

    StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());   
    long blockSize = statFs.getBlockSize(); 
    long totalSize = statFs.getBlockCount()*blockSize; 
    long availableSize = statFs.getAvailableBlocks()*blockSize; 
    long freeSize = statFs.getFreeBlocks()*blockSize; 
    

    ショート注釈

    のフリーブロック:

    (通常のアプリケーションでは使用できません です) 予約ブロックを含む、ファイル・システムの空き をしているブロックの合計数。

    利用可能なブロック:

    ファイルシステム 上の自由と 用途に利用可能なブロック数。ここ


    SDカードが装着されているかどうかを検出する方法である:。内部メモリ Environment.getRootDirectory(FOR

    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) 
    { 
        // We can read and write the media  
    } 
    else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) 
    { 
        // We can only read the media  
    } 
    else 
    { 
        // No external media 
    } 
    
    +0

    素晴らしい応答!オンボードのフラッシュメモリではなく、内蔵のSDカードのサイズを取得する方法はありますか? freeSizeとavailableSizeの違いは何ですか? – zsniperx

    +0

    あなたが求めた情報を含むように私の答えを編集しました。 – inazaruk

    +0

    ありがとう!私は時間があるとそれをチェックします。素晴らしい答え – zsniperx

    3
    /************************************************************************************************* 
    Returns size in MegaBytes. 
    
    If you need calculate external memory, change this: 
        StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath()); 
    to this: 
        StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());   
    **************************************************************************************************/ 
        public int TotalMemory() 
        { 
         StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath()); 
         int Total = (statFs.getBlockCount() * statFs.getBlockSize())/1048576; 
         return Total; 
        } 
    
        public int FreeMemory() 
        { 
         StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath()); 
         int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize())/1048576; 
         return Free; 
        } 
    
        public int BusyMemory() 
        { 
         StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath()); 
         int Total = (statFs.getBlockCount() * statFs.getBlockSize())/1048576; 
         int Free = (statFs.getAvailableBlocks() * statFs.getBlockSize())/1048576; 
         int Busy = Total - Free; 
         return Busy; 
        } 
    
    +0

    "TotalMemory"を使用すると-1166が返されます...変数の型をlongに変更しても、私には3071504384が返されます(〜3GB〜32GB)。 –

    2

    )getAbsolutePath()は、適切なアプローチではありません。

    デバイス

    Environment.getDataDirectory()動作しますが、再度、一貫していないのほとんどにも

    外部ディレクトリへのアプローチが正しいです。内部mnt/sdcardの使用を区別するには

    Environment.isExternalStorageRemovable()。

    しかし、私はまだどのようにして正確な内部メモリを取得するかと不思議です。オープンソースの矛盾と多くのバージョンと同様に。

    +0

    答えを見つけましたか? –

    0

    ほとんどの電話機では、合計ブロック数はユーザーが使用できるブロック数です(システムストレージなどが少なくなります)。私はまだ電話でストレージの合計量をもたらす方法を見つけることです。

    関連する問題