I am facing below error when trying to launch a PDF file stored in assets folder of android project in xamarin forms.
"this file could not be accessed. check your connection or make the filename shorter in xamarin forms"
Giving shorter file name didn't help.
Below is my code:
public interface IDocumentView
{
void ShowPDFTXTFromLocal(string filename);
}
[assembly: Xamarin.Forms.Dependency(typeof(DocumentView))]
namespace Portfolio_Pdf.Droid.Platform
{
public class DocumentView : IDocumentView
{
[Obsolete]
public void ShowPDFTXTFromLocal(string filename)
{
string reportSavedPath = "/data/user/0/com.companyname.portfolio_pdf/files/test.pdf";
Java.IO.File file = new Java.IO.File(reportSavedPath);
Xamarin.Forms.Device.BeginInvokeOnMainThread(() =>
{
var fileUri = Android.Net.Uri.FromFile(new Java.IO.File(reportSavedPath));
Intent intent = new Intent(Intent.ActionView);
var mimetype = MimeTypeMap.Singleton.GetMimeTypeFromExtension(MimeTypeMap.GetFileExtensionFromUrl((string)fileUri).ToLower());
Android.Net.Uri apkURI = FileProvider.GetUriForFile(
Xamarin.Forms.Forms.Context.ApplicationContext,
Xamarin.Forms.Forms.Context.ApplicationContext.PackageName + ".provider", file);
intent.SetDataAndType(apkURI, mimetype);
intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);
intent.SetFlags(ActivityFlags.GrantReadUriPermission | ActivityFlags.ClearTop);
intent.AddFlags(ActivityFlags.GrantReadUriPermission | ActivityFlags.ClearTop);
try
{
Xamarin.Forms.Forms.Context.StartActivity(intent);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
});
}
}
}
Android.Manifest.xml:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
provider_paths:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external"
path="." />
<external-files-path
name="external_files"
path="." />
<cache-path
name="cache"
path="." />
<external-cache-path
name="external_cache"
path="." />
<files-path
name="files"
path="." />
</paths>