我正在尝试 Android 开发。我正在制作一个允许用户浏览 Web 服务中的文件并查看它们的应用程序。这些文件可以是任何东西:文本、pdf、图片等。
以前,我会将文件下载到外部存储,然后调用Intent.SetDataAndType()
并将 URL 传递给文件。这将导致 Android 设备调出应用选择器并让用户选择适当的方法来查看文件。
但由于我不想让用户编辑文件,只看它,下载文件到存储似乎很愚蠢;一个我不想闲逛的文件。既然文件可以通过 URL 获取,我为什么不把它作为参数传递给Intent.SetDataAndType()
?
我试过了。第一个问题是文件名被假定为 Web 服务调用的名称,这似乎比 mime 类型更重要。我将 Web 服务更改为与尝试下载的任何文件同名。那解决了那个问题。
所以现在,文件正在被打开。但它总是在网络浏览器中打开。我可以选择网络浏览器,但我宁愿让另一个应用程序打开它。
我的代码如下所示:
Intent i = new Intent(Intent.ActionView);
i.SetDataAndType(Android.Net.Uri.Parse(GetUrlToFile(fileref, fileName)), 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);
代码在 C# 中,因为我使用的是 Xamarin,但我认为这不会有所作为。
我尝试使用StartActivity(Intent.CreateChooser(i, "Open me"));
,但这并没有给我更多的选择选择。
有没有人对如何做到这一点有任何想法?