Как получить общий путь к файлу PDF и открыть его в нашем приложении? - PullRequest
0 голосов
/ 03 июля 2019

Есть проблема, которую я не мог решить долгое время.Я хочу получить путь к файлу PDF с помощью кнопки «Поделиться» из другого приложения в мое приложение, созданное с помощью xamarin.Я попробовал кое-что, и они решили мою проблему, но это было не так, как я хотел.Это было;Я загрузил PDF в память телефона.Так что на моем телефоне было много PDF.После этого я могу поделиться этими PDF-файлами со своим приложением и увидеть их там.Но это было не совсем то, что я хочу.Допустим, есть приложение ABC, которое имеет много PDF.Я хочу открыть эти PDF-файлы и поделиться ими с моим приложением Xamarin напрямую, не сохраняя их.Я могу объяснить это на примере: у вас есть PDF, которым вы хотите поделиться со своими друзьями.Вы открываете этот PDF и нажимаете кнопку «Поделиться».После этого вы выбираете, какое приложение вы хотите использовать, например, Whatsapp, E-Mail, Skype, Discord и т. Д. Итак, наконец, вы можете отправить свой pdf напрямую в другое приложение без магазина.

 Intent intent = new Intent(Application.Context, typeof(MainActivity));



        var action = Intent.Action;
        var type = Intent.Type;

        if (Android.Content.Intent.ActionSend.Equals(action) &&
            (type?.Equals("text/plain") ?? false))
        {
            var path = Intent.GetStringExtra(Android.Content.Intent.ExtraText);
            Console.WriteLine(path);
        }


        if (Android.Content.Intent.ActionSend.Equals(action) && (type?.Equals("application/pdf") ?? false))
        {
            var uri = (Android.Net.Uri)Intent.GetParcelableExtra(Android.Content.Intent.ExtraStream);
            Context context = Android.App.Application.Context;
            var fullPath = GetFilePath(uri);               
            Navigate(fullPath);

        }
private string GetFilePath(Android.Net.Uri uri)
        {

            string[] proj = { MediaStore.Images.ImageColumns.Data };
            var cursor = ContentResolver.Query(uri, proj, null, null, null);            
            var colIndex = cursor.GetColumnIndex(MediaStore.Images.ImageColumns.Data);
            cursor.MoveToFirst();
            return cursor.GetString(colIndex);            

        }

Это ошибка, когда я делюсь pdf с моим приложением:

Необработанное исключение: Java.Lang.IllegalStateException: Не удалось прочитать строку 0, столбец -1 из CursorWindow.Убедитесь, что курсор инициализирован правильно, прежде чем получить доступ к данным из него.

1 Ответ

0 голосов
/ 09 июля 2019

Я изменил свой код с этого веб-сайта следующим образом:

https://codemilltech.com/sending-files-to-a-xamarin-forms-app-part-2-android/

, и это работает.Надеюсь, это кому-нибудь поможет.

if (Android.Content.Intent.ActionSend.Equals(action) && (type?.Equals("application/pdf") ?? false))
                {
                    // This is just an example of the data stored in the extras 
                    var uriFromExtras = Intent.GetParcelableExtra(Intent.ExtraStream) as Android.Net.Uri;
                    var subject = Intent.GetStringExtra(Intent.ExtraSubject);

                    // Get the info from ClipData 
                    var pdf = Intent.ClipData.GetItemAt(0);

                    // Open a stream from the URI 
                    var pdfStream = ContentResolver.OpenInputStream(pdf.Uri);

                    // Save it over 
                    var memOfPdf = new System.IO.MemoryStream();
                    pdfStream.CopyTo(memOfPdf);
                    var docsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
                    var filePath = System.IO.Path.Combine(docsPath, "temp.pdf");

                    System.IO.File.WriteAllBytes(filePath, memOfPdf.ToArray());

                    Navigate(filePath);

                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...