xamain.forms开发记录4
1、无法打开预览本地文件,提示could not download media无法找到资源,
网上查找了很多资料,其实还是对android原生系统不熟悉导致。
android为了增加安全性,对文档的访问进行了控制。在申请权限的时候需要动态申请,而非静态。
1、动态申请权限
protected override void OnResume()
{
base.OnResume();
#region 权限请求
if (ActivityCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage) != Permission.Granted)
{
ActivityCompat.RequestPermissions(this, new[] { Manifest.Permission.ReadExternalStorage, Manifest.Permission.WriteExternalStorage },0);
}
#endregion
}
2、路径地址:/storage/emulated/0/
3、viewer显示
var rs = System.IO.File.Exists(filepath);
if (rs)
{
var context = Android.App.Application.Context;
var file = new Java.IO.File(filepath);
//var uri = FileProvider.GetUriForFile(context, "com.jzxy.duoke.provider", new Java.IO.File(filepath));
//var uri = FileProvider.GetUriForFile(MainActivity.AppContext, MainActivity.AppContext.PackageName+ ".provider", new Java.IO.File(filepath));
var uri = Android.Net.Uri.FromFile(file);
try
{
var intent = new Intent(Intent.ActionView);
intent.AddCategory(Intent.CategoryDefault);
intent.SetFlags(ActivityFlags.GrantReadUriPermission);
intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);
intent.SetDataAndType(uri, mimeType);
Forms.Context.StartActivity(Intent.CreateChooser(intent, "选择打开的程序"));
}
catch (Exception e)
{
Toast.MakeText(context, e.Message, ToastLength.Long).Show();
}
}
好吧,就解决了。之前什么鬼方法都用过了,都不行。本案例的方法是我跑通调试过的。后期再把github地址发布出来