我想使用Android存储访问框架存储文件。我的测试代码应存储大小为1000000的文件“ hallo1”。但是,只会创建文件大小为0的文件“ hallo1”。我没有收到错误消息。仅在Google驱动器上无法正常保存在本地光盘和SD卡上。编码:
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
// Get our button from the layout resource,
// and attach an event to it
Button button = FindViewById<Button>(Resource.Id.myButton);
button.Click += delegate
{
Intent intentCreate = new Intent(Intent.ActionCreateDocument);
intentCreate.AddCategory(Intent.CategoryOpenable);
intentCreate.SetType("audio/*");
intentCreate.PutExtra(Intent.ExtraTitle, "hallo" + count);
StartActivityForResult(intentCreate, 1);
count++;
};
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
var stream = this.ContentResolver.OpenOutputStream(data.Data, "w");
var b = new byte[1000000];
stream.Write(b, 0, b.Length);
stream.Flush();
stream.Close();
base.OnActivityResult(requestCode, resultCode, data);
}
data.Data返回内部的Android.Net.Uri。
有人知道问题出在哪里?
我找到了解决方案:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
// this works fine:
using (System.IO.Stream stream = this.ContentResolver.OpenOutputStream(data.Data, "w"))
{
using (var javaStream = new Java.IO.BufferedOutputStream(stream))
{
var b = new byte[1000000];
javaStream.Write(b, 0, b.Length);
javaStream.Flush();
javaStream.Close();
}
}
// the direct writing on the System.IO.Stream failed:
//using (System.IO.Stream stream = this.ContentResolver.OpenOutputStream(data.Data, "w"))
//{
// var b = new byte[1000000];
// stream.Write(b, 0, b.Length);
// stream.Flush();
// stream.Close();
//}
base.OnActivityResult(requestCode, resultCode, data);
}
有人知道为什么这可行并且直接用System.IO.Stream编写失败?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句