Android携帯電話の内部記憶空間と外部記憶空間のパラメータを取得する&&apkのインストール位置をどのように決定するか

4788 ワード

Androidファイルシステムの情報を取得するには、EnvironmentクラスとStatFsクラスのサポートが必要です.
(1)Environmentは、環境変数にアクセスするためのクラスです.
A,getRootDirectory()は,Fileに戻り,Androidのルートディレクトリを取得する.
B,getDataDirectory()は,Fileに戻り,Androidデータディレクトリを取得する.
C,getExternalStorageDirectory()は、Fileに戻り、外部ストレージディレクトリであるSDCardを取得します.D,getExternalStorageState()は,Stringを返し,外部記憶装置の現在の状態文字列を取得する.
E,getDownloadCacheDirectory()は、Fileに戻り、Androidダウンロード/キャッシュコンテンツディレクトリを取得します.
一般的な文字列変数です.getExternalStorageStateの戻り値を例にとります.
       A,MEDIA_BAD_REMOVALは、SDCardがアンインストールされる前に削除されたことを示しています.       B,MEDIA_CHECKINGは、オブジェクトがディスクチェック中であることを示します.       C,MEDIA_MOUNTEDは、オブジェクトが存在し、読み取り/書き込み権限があることを示します.
       D,MEDIA_MOUNTED_READ_ONLYは、オブジェクト権限が読み取り専用であることを示します.
       E,MEDIA_NOFSは、オブジェクトが空白であるか、サポートされていないファイルシステムを使用していることを示します.
       F,MEDIA_REMOVED、SDCardは存在しません.
       G,MEDIA_SHAREDは、ストレージメディアがUSBで共有されていることを示しています.       H,MEDIA_UNMOUNTABLEは、ストレージメディアがマウントできないことを示しています.
       I, MEDIA_UNMOUNTEDは、ストレージメディアがマウントされていないことを示しています.
(2)StatFsクラス、linuxのdfコマンドをシミュレートするクラスであり、メンバー関数は最下位のLinuxファイルシステムを取得する属性関数である.StatFsの一般的な方法:
A,getavailableBlocks()は,Intに戻り,現在のシステムで利用可能な記憶領域のBlock数を取得する.
B,getBlockCount()は,Intに戻り,現在のシステム記憶空間の合計Block数を取得する.
C,getBlockSize()は、Intに戻り、現在のシステムBlockが占めるサイズをバイト単位で取得する
D,getFreeBlocks()は,利用可能空間と予約空間を含む残りの空間(Int)を返す.(3)取得システムとSDカードの利用可能容量及び総総量の一例.
import android.os.Environment;
import android.os.StatFs;
import java.io.File;
public long getAvailableInternalMemorySize(){
      	File path = Environment.getDataDirectory();  
    	StatFs stat = new StatFs(path.getPath());
    	long blockSize = stat.getBlockSize();
    	long availableBlocks = stat.getAvailableBlocks();
    	return availableBlocks*blockSize;
}
    
public long getTotalInternalMemorySize(){
    	File path = Environment.getDataDirectory();
    	StatFs stat = new StatFs(path.getPath());
    	long blockSize = stat.getBlockSize();
    	long totalBlocks = stat.getBlockCount();
    	return totalBlocks*blockSize;
}
    
public boolean externalMemoryAvailable(){
    	return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
}
    
public long getAvailableExternalMemorySize(){
    	if(externalMemoryAvailable()){
    		File path = Environment.getExternalStorageDirectory();
    		StatFs stat = new StatFs(path.getPath());
    		long blockSize = stat.getBlockSize();
    		long availableBlocks = stat.getAvailableBlocks();
    		return availableBlocks*blockSize;
    	}
    	else{
    		return -1;
    	}
}
    
public long getTotalExternalMemorySize(){
    	if(externalMemoryAvailable()){
    		File path = Environment.getExternalStorageDirectory();
    		StatFs stat = new StatFs(path.getPath());
    		long blockSize = stat.getBlockSize();
    		long totalBlocks = stat.getBlockCount();
    		return totalBlocks*blockSize;
    	}
    	else{
    		return -1;
    	}
}

LOGからデータを出力すればよい.M単位である.
        Log.i("zhangcheng","         :"+Long.toString(getAvailableInternalMemorySize()/(1024*1024)));
        Log.i("zhangcheng","         :"+Long.toString(getTotalInternalMemorySize()/(1024*1024)));
        
        Log.i("zhangcheng","         :"+Long.toString(getAvailableExternalMemorySize()/(1024*1024)));
        Log.i("zhangcheng","         :"+Long.toString(getTotalExternalMemorySize()/(1024*1024)));  

(4)メモリファイルシステムにアクセスするには、XMLに権限を追加する必要があります.
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

==========================================================================================================
SDカードにインストールできるアプリケーションもあれば、できないアプリケーションもあります.この中には一定のルールがあります.どう判断しますか?
GoogleのデフォルトPackageManagerがインストールパッケージを管理するメカニズムは、AdroidManifest.xmlでインストール場所を定義するには、4つのケースがあります.1.インストール場所が定義されていない場合は、携帯電話のメモリにインストールされていることを示します.2.android:installLocation=「auto」は、まず携帯電話のメモリが十分かどうかを確認し、十分であれば携帯電話のメモリにインストールし、足りなければTカードにインストールする.3.android:installLocation="internalOnly"は、携帯電話のメモリにインストールされていることを示します.4.android:installLocation="preferExternal"は、Tカードにインストールされていることを示します.
もしapkのAndroidManifestがxmlではandroid:installLocation=「internalOnly」と定義されています.ユーザーがどこにインストールするかにかかわらず、このapkは携帯電話にインストールされます.android:installLocation=「internalOnly」と定義されているapkは、一般的に携帯電話のメモリにインストールしてから正常に動作するため、プログラムの実行エラーを避けるメリットがあります.
参考原文:http://niufc.iteye.com/blog/1562079参考原文:http://hubingforever.blog.163.com/blog/static/17104057920126284847546/