編輯:關於Android編程
源碼下載(免下載積分):下載
外部存儲並不是一定可以訪問的,例如外部存儲掛載到電腦上是,或者是SD Card作為外部存儲,被移除是,因此在訪問外部存儲時,一定要保證外部存儲是可以獲得的。判斷外部存儲是否已經掛載到了手機上可以這樣判斷:
//判斷外部存儲是否可以訪問,並且可以讀寫
private boolean isExternalStorageWritable()
{
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
對於在外部存儲的存儲方式:
public files:文件可以被其他應用程序訪問,並且在卸載應用程序以後會被刪除
private files:卸載應用程序後,文件會被刪除,
public files
創建並寫入數據:
private void createPublicFile() {
//1. 判斷是否外部存儲可以訪問
if (isExternalStorageWritable()) {
/*
*2. 使用getExternalStoragePublicDirectory方法來創建一個文件路徑
* getExternalStoragePublicDirectory()方法會在外部存儲中獲得恰當的文件目錄
* 參數表示的是文件的類型,DIRECTORY_PICTURES,DIRECTORY_DOWNLOADS等
*/
publicPath = new File(Environment.getExternalStoragePublicDirectory
(Environment.DIRECTORY_PICTURES), "myPictures");
//3.創建文件
publicFile = new File(publicPath,"1.png");
if (!publicPath.exists()) {
//創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄
if (!publicPath.mkdirs()) {
//這裡拋出異常
throw new RuntimeException("不能創建所需目錄");
}
}
//4. 向文件中寫入數據
InputStream read = null;
FileOutputStream write = null;
try {
//Open a data stream for reading a raw resource
read = getResources().openRawResource(R.drawable.ic_launcher);
write = new FileOutputStream(publicFile);
byte[] data = new byte[read.available()];
//讀取數據到data數組中
read.read(data);
write.write(data);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try {
if (read != null)
read.close();
if (write != null)
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//5. 告訴media scanner創建了新文件,目的為了使用戶能立刻可以訪問
MediaScannerConnection.scanFile(this,
new String[]{ publicFile.toString()}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String publicPath, Uri uri) {
Log.e("public External Storeage", " Scanned "+publicPath+":");
Log.e("public External Storeage", " uri "+uri);
}
}
);
}
}
private files
其創建流程與public files的相同,只是在創建文件路徑時使用的是getExternalFilesDir()
(這個是Context方法)方法
對於文件的刪除,外部存儲直接調用myFile.delete(),而對於內部存儲的方式,就要調用
context.deleteFile(fileName);
對於在外部存儲中創建緩存文件,可以調用getExternalCacheDir()方法,
權限:
對於外部存儲應該添加相關的權限例如寫數據:
但對於android 4.4如果把文件存儲為private files時不需要使用相關的權限
參考資料: http://developer.android.com/training/basics/data-storage/files.html http://developer.android.com/guide/topics/data/data-storage.html在Android項目開發過程中,Android Studio是一款非常強大的開發工具。到底有多強大,用了你就知道了。本文我將介紹Studio引用Library開源項目與導
Android 自定義陰影效果詳解及實例Android5.X中,Google為其增加了兩個屬性 android:elevation=” ” 與 android:trans
本篇博客內容轉自 github: https://github.com/shwenzhang/AndResGuard/blob/master/README.zh-cn.m
我們都知道對每一個Weibo Item都有用戶頭像,而且每一條微博還可能帶有圖片。如果在加載列表的同時加載圖片,這樣有幾個缺點,第一很費事,界面卡住,用戶體