Как вызвать старые намерения, когда приложение начинается с обмена? - PullRequest
0 голосов
/ 17 февраля 2020

Я хочу объяснить логику моего приложения c. Мое приложение просматривает PDF-файлы. Существует 2 способа отображения PDF.

  1. Пользователь входит в приложение и нажимает кнопку Показать PDF. Затем приложение открывает новое окно, и пользователь выбирает файл PDF для его просмотра.

  2. Пользователь открывает файл PDF из своей памяти телефона и делится этим файлом PDF с моим приложением. (Если пользователь ранее не входил в приложение, приложение открывает страницу входа.)

Первый работает нормально. Но когда пользователь отправляет PDF-файл моему приложению из своего хранилища телефона, приложение автоматически открывает мой HomePape.

В приложении есть 2 публикации c LoginPage () {}.

1 .publi c LoginPage ()

2.publi c LoginPage (строка _pdfUri)

Первый позволяет пользователю войти в приложение. Второе, если пользователь не вошел в приложение и поделился с ним PDF-файлом. Таким образом, приложение получает pdfpath и открывает PdfShowPage.

Давайте проверим код,

App.xaml.cs:

/ * Я отладил это. Приложение всегда приходит сюда, даже когда пользователь делится Pdf. Из-за этого PdfShowPage LoginPage работает, а LoginPage (строка _pdfUri) не работает. Приложение открывает HomePage.

LoginPage () -> HomePage

LoginPage (строка _pdfUri) -> PdfShowPage

* /

 public App()
        {
            InitializeComponent();            
                MainPage = new NavigationPage(new LoginPage())
                {
                    BarBackgroundColor = Color.FromHex("008000"),
                    BarTextColor = Color.FromHex("E8E8E8")
                };            
        }

protected override void OnStart()
        {
           // Handle when your app starts
        }

        protected override void OnSleep()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume()
        {
            // Handle when your app resumes
        }

MainActivity.cs,

protected override async void OnCreate(Bundle savedInstanceState)
        {

            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);
            ZXing.Net.Mobile.Forms.Android.Platform.Init();
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());

            Share();           

        }

private void Share()
{
   //Some codes for share
   Navigate(path);
}

public async void Navigate(string path)
{
            await Xamarin.Forms.Application.Current.MainPage.Navigation.PushModalAsync(new LoginPage(path));

}

LoginPage.cs,

public LoginPage(string _pdfUri)
{
 this.PdfUri = _pdfUri;

 CheckSessionWithUri(_pdfUri); //it checks session and send pdf path to PDFshowPage.
}

public LoginPage()
{     

 CheckSession(); //it sends user to the HomePage if the user correctly login or the user has login before.
}

Я хочу контролировать, когда пользователь делится pdf в моем приложении, приложение должно отправить его в PdfShowPage. Должны ли мы контролировать это в App.xaml.cs или где-то еще?

Спасибо.

1 Ответ

0 голосов
/ 18 февраля 2020

Может быть, вы могли бы передать _pdfUri классу App, а затем открыть LoginPage базу на _pdfUri. как:

protected override async void OnCreate(Bundle savedInstanceState)
    {

        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);
        ZXing.Net.Mobile.Forms.Android.Platform.Init();
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);


        Share();           

    }

private void Share()
{
  //Some codes for share
   LoadApplication(new App(_pdfUri));
}

затем

public App(string _pdfUri)
    {
        InitializeComponent();   
        if(path !=null){
           MainPage = new NavigationPage(new LoginPage(_pdfUri))
            {
                BarBackgroundColor = Color.FromHex("008000"),
                BarTextColor = Color.FromHex("E8E8E8")
            };    
        }else{
           MainPage = new NavigationPage(new LoginPage())
            {
                BarBackgroundColor = Color.FromHex("008000"),
                BarTextColor = Color.FromHex("E8E8E8")
            };     
        }

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