androidstorage
『壹』 求助,關於android開發中使用Storage的問題
sae-local是伺服器環境的支持包,也就是說這個包的運行依賴於伺服器的jvm,放在android環境里當然是不行的。
需求用需要在
建立java工程,利用sae包處理客戶端的上傳請求,android通過http post方式上傳文件,路徑是這樣的
android --> http post stream --> server --> storage
『貳』 如何區分Android storage USB memory和 Sdcard
由於現在做平板開發,必須得分出這2個存儲。
USB memory和 sdcard
一般就看Enviroment類的源碼。
public static File getExternalStorageDirectory() {
// Try to be smarter
// Return EXTERNAL_STORAGE_DIRECTORY_SD if SD card is ready
// Return EXTERNAL_STORAGE_DIRECTORY_UDISK if SD card is absent but udisk is ready
// Return EXTERNAL_STORAGE_DIRECTORY_SD if both sd card and udisk are not ready
String propSD = SystemProperties.get("EXTERNAL_STORAGE_STATE_SD", MEDIA_REMOVED);
String propUDISK = SystemProperties.get("EXTERNAL_STORAGE_STATE_UDISK", MEDIA_REMOVED);
String propEXTSD = SystemProperties.get("EXTERNAL_STORAGE_STATE_EXTSD", MEDIA_REMOVED);
if (propSD.equals(MEDIA_MOUNTED) || propSD.equals(MEDIA_MOUNTED_READ_ONLY)) {
return EXTERNAL_STORAGE_DIRECTORY_SD;
} else if (propUDISK.equals(MEDIA_MOUNTED) || propUDISK.equals(MEDIA_MOUNTED_READ_ONLY)) {
return EXTERNAL_STORAGE_DIRECTORY_UDISK;
} else if (propEXTSD.equals(MEDIA_MOUNTED) || propEXTSD.equals(MEDIA_MOUNTED_READ_ONLY)) {
return EXTERNAL_STORAGE_DIRECTORY_EXTSD;} else {return EXTERNAL_STORAGE_DIRECTORY_SD;}}然後Environment.getExternalStorageDirectory().getAbsolutePath()
看返回的是"/sdcard"還是"/udisk"既可。
如果你直接指定這2個路徑,去得到裡面的文件時,是錯誤的!
storage就是手機的rom即(手機自帶內存)
在手機里或同步電腦後,資源管理的根目錄就可以看到這個storage的文件夾了.
『肆』 安卓系統,storage文件夾只有500多m,但是在設置的儲存里顯示全部空間佔用有1.1g。
會有臨時數據在隱藏目錄下的情況,比如.開頭的文件夾只能是有Root許可權的手機用R.E.管理器訪問的。
『伍』 android 怎麼從storage中獲取文件數據
sae既然封裝了存儲路徑 而且這個路徑還不在主機伺服器上
你就不能直接用http協議直接訪問storage中的文件
但是你可以通過一個php頁面把storage中的文件讀出來在發送給前端
getshuju.php
<?php
echo file_get_contents('saestor://'.$domain.'/'.$filename);
page.html
$.ajax({
url:'getshuju.php'
『陸』 Android外部存儲ExternalStorage
內存(emory)
內部存儲(ternalStorage)
1)storage或者mnt文件夾下
2) 通過:
Environment.getExternalStorageDirectory()
可以看到外部存儲的位置
3) 公有目錄(DCIM、DOWNLOAD等),要使用需要申請許可權。
4) 私有目錄(Android/data/應用包名),只能被當前應用訪問。
String path= Environment.getExternalStorageDirectory().getAbsolutePath() +"/Mytest.txt";
try {
if (!file.exists()) {
file.createNewFile();
}
}catch (IOException e) {
e.printStackTrace();
}
try {
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos=new FileOutputStream(path,true);
String str=infoEdt.getText().toString();
fos.write(str.getBytes());//以位元組流的方式寫入
}catch (IOException e) {
e.printStackTrace();
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
其中第二條許可權可能會報錯,這時候解決辦法是:
在報錯的地方添加
tools:ignore="ProtectedPermissions"
同時在manifest標簽里添加;
xmlns:tools="http://schemas.android.com/tools"
FileInputStream fis =new FileInputStream(path);
byte[] b =new byte[1024];
int len = fis.read(b);//讀取fis位元組流,將其存儲在位元組數組b中,並返回數組的長度(位元組的個數)
String str2=new String(b,0,len);
txt.setText(str2);
注意:1、從外部存儲讀取文件不需要許可權
2、Android6.0以上對外部存儲(內存卡)共有目錄的讀寫需要運行時許可權(允許訪問內存卡),這個許可權需要用戶手動開啟,只在AndroidManifest.xml中申請是沒用的。
int permissionContextCompet.checkSelfPermission(context,permission) 檢查是否具有許可權
第一個參數,環境上下文(this),第二個參數,許可權名,Manifest.permission.WRITE_EXTERNAL_STORAGE,返回的是一個int類型的變數,將其與PackageManger.PERMISSION_GRANTED比較,等於則說明有許可權,不等於的話則要動態申請許可權:
if(permission!= PackageManager.PERMISSION_GRANTED){
//沒有許可權,則要申請許可權
}
ActivityCompet.reaquestPermissions(activity,permission,code) 請求許可權,第一個參數:activity 第二個參數:String類型的數組,裡面裝了各種許可權, 當有多項許可權需要申請的時候可以一起申請,第三個參數:一個int類型的請求碼,動態申請許可權的時候會觸發onRequestPermissionsResult()方法,如果在申請的過程中有什麼需要做的操作可以定義在該方法中,第三個參數請求嗎可以幫助知道是那個許可權的申請觸發了這個方法
int permission=ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(permission!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==1){
//當前沒有什麼要處理的
}
}
通過:Environment.getExternalStorageDirectory()獲取到的是根目錄,通過在後面拼接目錄名稱,可以訪問到公有目錄
要獲取外部存儲目錄的私有目錄,可以通過:
1)Context.getExternalFilesDir(String type)獲取到SDCard/Android/data/包名/files/目錄,這個目錄下一般存放一些需要長時間保存的數據。這個參數是用於指定文件夾類型的(圖片,音樂,視頻...)。
2)Context。getExternalCacheDir()獲取到SDCard/Android/data/包名/cache/目錄,這個目錄下面一般存放一些臨時的緩存性的數據。
『柒』 求助,關於android開發中使用Storage的問題
只用一種,按鈕等元件的大小就完全跟著屏幕參數走了,火柴盒那麼大小的按鈕固然不美觀,但比葯片還小的按鈕才真正要命:因為用戶基本點不準
『捌』 Android得到的真機的SD卡路徑是 /storage/emulated/0/,該怎麼解決
這是引用路徑,別擔心。
打開你的ddms File Explorer
你可以在你的mnt/sdcard後面看到一列info列
裡面寫的就是類似於/storage/emulated/0/這個東西
然後你可以在你的File Explorer中找到storage文件夾,下面就會有emulated,然後下面會有0
其實都是一樣的