分类: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(); } }; } } }