Unity Android 文件的读写
配置AndroidManifest 文件
在Assets 目录下查找AndroidManifest 文件,添加权限声明,在application 节点中添加requestLegacyExternalStorage 属性。
<!-- 权限声明 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:requestLegacyExternalStorage="true">...</application>
权限检查及申请
Android 6 及以上版本需要动态申请读写权限。
if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
{Permission.RequestUserPermission(Permission.ExternalStorageRead);
}
yield return new WaitUntil(() => Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead));
if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
{Permission.RequestUserPermission(Permission.ExternalStorageWrite);
}
yield return new WaitUntil(() => Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite));
*开启权限后需重启软件。
文件目录路径
AndroidJavaClass androidJavaClass = new AndroidJavaClass("android.os.Environment");
AndroidJavaObject androidJavaObject = androidJavaClass.CallStatic<AndroidJavaObject>("getExternalStorageDirectory");//根目录
/* Downloads 目录
* AndroidJavaObject androidJavaObject = androidJavaClass.CallStatic<AndroidJavaObject>("getExternalStoragePublicDirectory", androidJavaClass.GetStatic<string>("DIRECTORY_DOWNLOADS"));
*/
path = androidJavaObject.Call<string>("getAbsolutePath");
filePath = Path.Combine(path, fileName);
写入
try
{File.WriteAllText(filePath, contents);
}
catch (Exception e)
{}//[Serializable]
//public class SaveData
//{
// public string createTime;
// public string contents;
//}//try
//{
// BinaryFormatter bf = new BinaryFormatter();
// FileStream file = File.Create(filePath);
// SaveData data = new SaveData()
// {
// createTime = DateTime.Now.ToString(),
// contents = "The Life Of A Showgirl available Oct. 3"
// };
// bf.Serialize(file, data);
// file.Close();
//}
//catch (Exception e)
//{//}
读取
if (File.Exists(filePath))
{contents = File.ReadAllText(filePath);//BinaryFormatter bf = new BinaryFormatter();//FileStream file = File.Open(filePath, FileMode.Open);//SaveData data = (SaveData)bf.Deserialize(file);//file.Close();//Debug.Log(data.contents);
}