On Jul 25, 2012, at 2:07 PM, Matthieu Laban <[email protected]>
wrote:
> I've tried using Assets.Open but accessing the Length or Position property
> throws an exception. Tried setting the access flag to Access.Random but this
> made no difference.
They throw an exception because there's no way for them to work.
AssetManager.open() returns a java.io.InputStream:
http://developer.android.com/reference/android/content/res/AssetManager.html#open(java.lang.String)
java.io.InputStream, meanwhile, has no API to access stream location:
http://developer.android.com/reference/java/io/InputStream.html
AssetManager.open() will return a subclass; you can access the actual
InputStream instance by casing the Stream returned by AssetManager.Open() to an
InputStreamInvoker [0] and using InputStreamInvoker.BaseInputStream [1], but I
doubt that the actual type will permit accessing stream position either.
> The solutions I've found online were to transfer all the contents to a memory
> stream. It seems like a bad idea in the cases where I read files that are a
> few MB in size...
I would instead suggest copying the resource into the cache directory:
http://androidapi.xamarin.com/?link=P%3aAndroid.Content.Context.CacheDir
> Any advice? Should I use something else for my resources?
Does it need to be a Resource? The only times it needs to be a Resource is when
you need to have a Resource ID because you're referencing it within a .axml
layout file, or because some API you're using only deals with Resource IDs. If
you don't need a Resource, you could instead use .NET Embedded Resources (Build
action: EmbeddedResource) and then use Assembly.GetManifestResourceStream() to
read it:
http://androidapi.xamarin.com/?link=M:System.Reflection.Assembly.GetManifestResourceStream(string)
- Jon
[0] http://androidapi.xamarin.com/?link=T%3aAndroid.Runtime.InputStreamInvoker
[1]
http://androidapi.xamarin.com/index.aspx?link=P%3aAndroid.Runtime.InputStreamInvoker.BaseInputStream
_______________________________________________
Monodroid mailing list
[email protected]
UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid