Показать PDF из URI в Android - PullRequest
       0

Показать PDF из URI в Android

0 голосов
/ 16 января 2020

Я получаю pdf-файл от API, и у меня есть что-то вроде этого http://x/docs/document1

В моем android проекте у меня так:

try{
   Android.Content.Intent activity = new Android.Content.Intent(this, typeof(WebViewPDF));
   activity.AddFlags(Android.Content.ActivityFlags.GrantReadUriPermission);
   activity.AddFlags(Android.Content.ActivityFlags.NoHistory);
   string uriAndroid = "http://x/docs/document1";
   activity.PutExtra("url", JsonConvert.SerializeObject(uriAndroid));
   StartActivity(activity);
}catch (Exception){
...
}

Основная проблема в том, что я не могу изменить API, поэтому конечная точка равна http://x/docs/document1, но если я попробую другой URI с расширением .pdf, например https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf работает нормально.

Я не знаю, нужно ли мне получать эту информацию из API другим способом. Как я могу показать pdf в webView или во внешнем приложении, не загружая сначала do c?

1 Ответ

0 голосов
/ 21 января 2020

Сначала было загружено решение, а затем открыто с локального.

        void PrintPdf(Uri uri)
        {

            var webClient = new WebClient();

            webClient.Proxy = WebRequest.DefaultWebProxy;
            webClient.Credentials = new NetworkCredential("UserName", "Pass");
            webClient.Encoding = Encoding.UTF8;

            var bytes = webClient.DownloadData(uri);

            var text = bytes; // get the downloaded text
            string localFilename = "NameforPdf.PDF";
            string localPath = System.IO.Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).ToString(), localFilename);
            File.WriteAllBytes(localPath, text); // writes to local storage
            bool exists = File.Exists(localPath);
            if (exists)
            {
                Java.IO.File file = new Java.IO.File(localPath);
                file.SetReadable(true);
                //That's the important part, notice the content://
                Android.Net.Uri uriLocal = Android.Net.Uri.Parse("content://" + localPath);
                Intent intent = new Intent(Intent.ActionView);
                intent.SetFlags(ActivityFlags.NewTask);
                intent.SetDataAndType(uriLocal, "application/pdf");
                intent.AddFlags(ActivityFlags.GrantReadUriPermission);

                try
                {
                    StartActivity(intent);
                }
                catch (Exception)
                {
                    Toast.MakeText(Xamarin.Forms.Forms.Context, "pdf reader not installed", ToastLength.Short).Show();
                }
            }           
        }
...