我还没有找到办法做到这一点,所以我已经通过一个解决方法。
我没有使用URL,而是将我的应用程序更改为Content Provider。现在,当我想要打开该文件时,我创建了一个指向应用程序中的文件的URI,并将其传递给一个Intent。当我的应用程序与此Intent联系时,我将该文件本地下载到我的缓存目录并返回。
我的代码已经变成这样:
Intent i = new Intent(Intent.ActionView);
i.SetDataAndType(Android.Net.Uri.Parse("content://com.sample.erik.provider/files/" + id), mimeType);
i.SetFlags(ActivityFlags.GrantReadUriPermission);
i.SetFlags(ActivityFlags.NewTask);
i.SetFlags(ActivityFlags.ClearWhenTaskReset); // so if the app is relaunched, we don't show the display application.
StartActivity(i);
然后,我有大部分工作在OpenFile()
public override ParcelFileDescriptor OpenFile(Android.Net.Uri uri, string mode)
{
switch (sUriMatcher.Match(uri))
{
case FILE_ID:
if (mode != "r")
throw new Java.Lang.UnsupportedOperationException("Do not support write access: " + uri);
String id = uri.LastPathSegment;
Java.IO.File file = new Java.IO.File(Application.Context.CacheDir, id);
DownloadToFile(file, id);
return ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);
default:
throw new Java.Lang.IllegalArgumentException("Unknown Uri: " + uri);
}
}
这不是我的原计划我自己的内容提供商,但该方式似乎工作得很好,满足了我的需求。