3

私のプロジェクトは、マスター/詳細ナビゲーションで構築されています。リストには、Resources、Contacts、および Login という名前の合計 3 つのページがあります。iOS ではすべて正常に動作しますが、ユーザーが Droid/WinPhone デバイスのハードウェアの戻るボタンを押すと、アプリは終了するはずです。すべてのデバイスで動作する Xamarin Forms のアプリ終了メカニズムはありますか? (プラットフォームに依存しないネイティブ コードを意味します) よろしくお願いします。

4

5 に答える 5

8

この通りにしました

xamarin フォームにインターフェイスを追加しました

public interface INativeHelper
{
    void CloseApp();
}

Androidプロジェクトでは、INativeHelperの実装を行いました

public class NativeHelper : INativeHelper
{
    public void CloseApp()
    {
        Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
    }                
}

IOS での INativeHelper の実装

public class NativeHelper : INativeHelper
{
    public void CloseApp()
    {
        Process.GetCurrentProcess().CloseMainWindow();
        Process.GetCurrentProcess().Close();
    }       
}

次に、Xamarin.Forms プロジェクトのページでメソッド OnBackButtonPressed をオーバーライドするだけです

protected override bool OnBackButtonPressed()
    {
        INativeHelper nativeHelper = null;
        nativeHelper = DependencyService.Get<INativeHelper>();
        if (nativeHelper != null)
        {
            nativeHelper.CloseApp();
        }  

        return base.OnBackButtonPressed();
    }

WinPhone 向けの実装はしていませんが、同様のはずです。

于 2016-10-26T07:26:01.013 に答える
3

物理的な戻るボタンが押されたときにアプリを閉じるために DepedencyService を使用できます。

UI (PCL) で、次の操作を行います。

protected override bool OnBackButtonPressed()
{
   if (Device.OS == TargetPlatform.Android)
       DependencyService.Get<IAndroidMethods>().CloseApp();

   return base.OnBackButtonPressed();
}

次に、Android プロジェクトに Android 固有のロジックを実装します。

[assembly: Xamarin.Forms.Dependency(typeof(AndroidMethods))]
namespace Your.Namespace
{
   public class AndroidMethods : IAndroidMethods
   {
       public void CloseApp()
       {
            Android.OS.Process.KillProcess(Android.OS.Process.MyPid());
       }
   }
}

インターフェイスも作成します (UI PCL 内)。

public interface IAndroidMethods
{
    void CloseApp();
}
于 2016-10-27T11:20:56.023 に答える
1

私の知る限り、Xamarin アプリケーションでアプリを終了するネイティブな方法はありません。

唯一の方法は、依存サービスを使用することです。ContentPage で OnBackButtonPressed 関数をオーバーライドし、それが最後のページであることを確認します。

protected override bool OnBackButtonPressed()
{
 if(navigation.NavigationStack.Count == 1)//navigation is MainPage.Navigation
  DependencyService.Get<YourDependencyInterface>().CloseApp();
}

YourAndroidDependencyクラスのAndroidの場合:

public void CloseApp()
{
 (Xamarin.Forms.Forms.Context as Activity).Finish();
}

WinPhoneについてはわかりませんが、依存関係サービスと同じ方法で実行できると思います。

于 2016-10-26T07:30:07.923 に答える