【发布时间】:2017-06-02 08:02:55
【问题描述】:
试图让 Android 选择器显示可用的操作以供用户启动存储在我的本地文件夹中的 PDF 文件。 当我传递 /data/user/0/myappappname/files/output.pdf 之类的文件名(当然存在)时,我会得到一个不错的选择器,其中包含所有可以接受的应用程序pdf文件。但是当我选择其中任何一个时,我收到一个错误(来自外部应用程序)文档路径无效。没有抛出异常。
然后我尝试(出于测试目的)将 fname 设置为 /storage/emulated/0/Download/TLCL.pdf (文件也存在),并且一切正常。
起初,我认为这与文件权限有关(因为第一个路径是我的应用程序私有的),但后来我发现标记 ActivityFlags.GrantReadUriPermission 正是为了临时授予而构建的文件访问其他应用程序。还是一样的结果。
由于这是一个 Xamarin.forms 项目,我在文件创建位置的选择上受到限制(我使用 PCLStorage,它总是写入 app-private 本地文件夹),所以我没有在/文档、/下载等。
我显然做错了什么。任何想法表示赞赏。
是否有从系统获取完整路径的选项,包括 /storage/emulated/0 部分(或其他设备上的任何内容)?也许这会有所帮助?
一段代码:
(之前mimeType被定义为“application/pdf”)
public async Task<bool> LaunchFile(string fname, string mimeType)
{
var uri = Android.Net.Uri.Parse("file://" + fname );
var intent = new Intent(Intent.ActionView);
intent.SetDataAndType(uri, mimeType);
intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask | ActivityFlags.GrantReadUriPermission );
try
{
Forms.Context.StartActivity(Intent.CreateChooser(intent, "ChooseApp"));
return true;
}
catch (Exception ex)
{
Debug.WriteLine("LaunchFile: " + ex.Message);
return false;
}
【问题讨论】:
标签: c# android xamarin.android xamarin.forms