標籤:
分類:C#、Android、VS2015;
建立日期:2016-02-27 一、簡介
1、基本概念
內部儲存的私人可用儲存空間一般都不會很大,對於容量比較大的檔案,例如視頻等,應該將其儲存在外部存放裝置(SD卡)上。
注意,不要將手機記憶體和手機插入入的儲存卡(手機卡、SD卡)混淆在一起,記憶體是不能持久儲存的,一關機所有資訊就全部丟失了,而內部儲存(移動經銷商賣的手機卡,容量小,但是沒有它打不了電話)、外部儲存(SD卡,容量大,各種檔案都能儲存)都是可以持久儲存的裝置,因此才叫檔案儲存體。
可以通過AOD模擬器指定要建立的SD卡的容量,具體見第2章的介紹。
下面是儲存在SD卡上的熱門檔案夾:
- Alarms:儲存用於警告的音頻音效檔(audio files)。
- Dcim:儲存相機拍攝的圖片檔案和視頻檔案(pictures and videos)。
- Downloads:儲存使用者下載的各種類型的檔案。
- Movies:儲存媒體瀏覽器可搜尋到的電影檔案。
- Music:儲存媒體瀏覽器可搜尋到的音樂檔案。
- Notifications:儲存用於通知的音頻檔案,例如簡訊通知等。
- Pictures:儲存媒體瀏覽器可搜尋到的圖片檔案。
- Podcasts:儲存部落格檔案。
- Ringtones:儲存手機鈴聲音頻檔案。
注意:在Android 6.0中,必須提供外部儲存的讀寫權限才能對SD卡檔案夾下的檔案進行操作。
通過Environment類的靜態屬性可指定SD卡上的這些檔案夾類型。
調用GetExternalStorgeState方法可檢測SD卡的狀態。使用外部儲存(SD卡)之前,最好先判斷它是否可用,如果可用,直接通過普通的檔案操作對其進行讀寫即可。
2、如何將檔案複製到模擬器的SD卡上
找到C:\Users\你的使用者名稱\.android\avd\Galaxy_Api23.avd\sdcard.img,用虛擬光碟機軟體(比如UltraISO)開啟這個檔案,然後複製硬碟上的檔案,將其粘貼到SD卡對應的目錄下,儲存即可。 二、樣本2運行
運行後,在模擬器上查看SD卡上的Download檔案夾,就會發現已經寫入了a1.txt檔案。
三、主要設計步驟
1、檢查對外部儲存的讀寫權限
外部儲存需要使用者賦予對應的讀寫權限才可以通過程式讀取和寫入。
滑鼠雙擊Properties檔案夾,在彈出的視窗中,查看是否已經選中外部儲存的寫入權限(WRITE_EXTERNAL_STORAGE),如果沒有選中,選中它。
由於第3章的例子中已經賦予了寫入權限,因此你看到的應該是已經選中了。另外,如果使用者給應用程式賦予了對外部儲存的寫入權限,那麼也意味著同時給這個應用程式賦予了讀許可權(READ_EXTERNAL_STORAGE),因此讀許可權不需要再選中。
2、添加ch1402_Main.axml檔案
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/MyButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="寫入檔案到SD卡的Download檔案夾" /></LinearLayout>
3、添加ch1402MainActivity.cs檔案
using Android.App;using Android.OS;using Android.Widget;namespace MyDemos.SrcDemos{ [Activity(Label = "【例14-2】外部檔案存取")] public class ch1402MainActivity : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ch1402_Main); Button button = FindViewById<Button>(Resource.Id.MyButton); button.Click += delegate { string rootDir = Android.OS.Environment.ExternalStorageDirectory.Path; string downloadDir = Android.OS.Environment.DirectoryDownloads; string filePath = $"{rootDir}/{downloadDir}/a1.txt"; if (Android.OS.Environment.ExternalStorageState == Android.OS.Environment.MediaMounted) { string text = "Hello,張三!"; System.IO.File.WriteAllText(filePath, text, System.Text.Encoding.UTF8); Toast.MakeText(this, $"檔案已寫入到:\n{filePath}", ToastLength.Long).Show(); } }; } }}
【Android】14.2 外部檔案儲存體和讀取