如何使用预览在C#上为Android创建PDF查看器

时间:2019-02-06 10:45:56

标签: android pdf xamarin thumbnails reader

我想创建或找到使用预览选项在Android上读取PDF文件的应用。因此,它将所有页面的缩略图放在1上。

如何使用C#在Xamarin上执行此操作?

1 个答案:

答案 0 :(得分:1)

请按照以下步骤操作。

步骤1:您必须在 AndroidManifest.xml 中的应用程序标记下添加提供程序

<application>
    <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="your package name.provider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
              android:name="android.support.FILE_PROVIDER_PATHS"
              android:resource="@xml/file_paths" />
          </provider>
     </application>

第2步:在PDF查看器中从Assets文件夹中打开文件

  private void OpenPdfInExternalApplication(string filename)
    {
        AssetManager assetManager = Activity.Assets;
        string fileName1 = filename + ".pdf";
        var file = new File(Activity.FilesDir, fileName1);

        Uri uri = null;
        Intent intent = new Intent(Intent.ActionView);
        try
        {
            // Get the input stream
            Stream input = assetManager.Open(fileName1);
            Stream output;
            if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
              {
                output = Activity.OpenFileOutput(file.Name, FileCreationMode.Private);
                uri = FileProvider.GetUriForFile(Activity, Activity.PackageName + ".provider", file);
                 intent.SetDataAndType(uri, "application/pdf");
              }
              else
              {
                   output = Activity.OpenFileOutput(file.Name, FileCreationMode.WorldReadable);
                  intent.SetDataAndType(Uri.Parse("file://" + Activity.FilesDir + "/" + fileName),
                 "application/pdf");
              }
            input.CopyTo(output);
            intent.AddFlags(ActivityFlags.GrantPrefixUriPermission);
            intent.AddFlags(ActivityFlags.GrantReadUriPermission);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }

        try
        {
            StartActivity(intent);
        }
        catch (ActivityNotFoundException ex)
        {
            Toast.MakeText(Activity, ex.Message, ToastLength.Long).Show();
        }
    }