в моем приложении Xamarin Forms я создаю PDF-файлы, которые можно открыть с помощью приложения Android.
На устройстве с Android 7 все работает нормально, сейчас проверил на Android 8 и файл не открывается.
Я установил Xam.PluginMedia и оставил все настройки по умолчанию:
в MainActivity я переопределил функцию OnRequestPermissionsResult с помощью:
Plugin.Permissions.PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
file_paths.xaml:
<?xml version = "1.0" encoding = "utf-8"?>
<paths xmlns:android = "http://schemas.android.com/apk/res/android">
<external-files-path name = "my_images" path = "Pictures" />
<external-files-path name = "my_movies" path = "Movies" />
</paths>
и в AndroidManifest.xml я добавил:
<provider android:name = "android.support.v4.content.FileProvider"
android:authorities = "${applicationId}.fileprovider"
android:exported = "false"
android:grantUriPermissions = "true">
<meta-data android:name = "android.support.FILE_PROVIDER_PATHS" android:resource = "@xml/file_paths"></meta-data>
Код для открытия превью таков:
public void OpenPreviewFile(string FilePath)
{
Java.IO.File JavaFile = new Java.IO.File(FilePath);
Android.Net.Uri Path = FileProvider.GetUriForFile(global::Android.App.Application.Context, global::Android.App.Application.Context.PackageName + ".fileprovider", JavaFile);
string Extension = global::Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(Path.ToString());
string MimeType = global::Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(Extension);
Intent Intent = new Intent(Intent.ActionView);
Intent.SetDataAndType(Path, MimeType);
Intent.AddFlags(ActivityFlags.GrantReadUriPermission);
Intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);
try
{
MainActivity.AppInstance.StartActivity(Intent.CreateChooser(Intent, TS.Translate("ANDROID_ScegliApp")));
}
catch (System.Exception)
{
Toast.MakeText(MainActivity.AppInstance, TS.Translate("ANDROID_ImpossibileAprireIlFIle"), ToastLength.Short).Show();
}
}
Сгенерированные файлы находятся по этому пути:
Android/data/MY_PACKAGE_ID/files/GeneratedReports
Я приложил видео, чтобы показать фактическое поведение.
Здесь образец
Привет, спасибо, я пытался написать это вручную, но проблема все еще сохраняется.





Я нашел проблему.
Внутри file_paths.xml значение «путь» узлов должно начинаться с «/»,
так с этим узлом:
<files-path name = "GeneratedReports" path = "/GeneratedReports" /> мой код работает.
Также мне нужно было удалить MyIntent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);
Я изо всех сил пытался заставить это работать уже полдня. Удаление строки, о которой вы упоминали выше, помогло мне. Большое спасибо, вы сделали мой день!
ваш
applicationIdтакой же, как у пакета? попробуй написать от руки и попробуй еще раз