【问题标题】:How to Reset a Xamarin forms Navigation stack from a Xamarin droid Assist activity如何从 Xamarin 机器人辅助活动重置 Xamarin 表单导航堆栈
【发布时间】:2017-02-22 00:32:08
【问题描述】:

Helo 我正在为我的应用程序添加一个辅助功能,当用户按住主页按钮时,一个 android 活动将打开,用户可以单击该卡片,然后打开相关的 xamarin 表单页面,例如当单击数学卡 MathPage xamarin 表单页面将打开此工作,但是如果我在后台运行 xamarin 表单应用程序,则无论我单击什么按钮,它都会加载主屏幕布局。如果我从多任务处理中关闭 xamarin 表单应用程序并按住主页按钮并单击数学卡,它将打开 MathPage。

这是我的 android 活动代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Xamarin.Forms.Platform.Android;

namespace Appname.Droid
{
[Activity(LaunchMode = LaunchMode.SingleInstance, Theme = "@style/Theme.Transparent")]
    [IntentFilter(new[] { Intent.ActionAssist }, Categories = new[] { Intent.CategoryDefault })]    
    public class ToolBelt : Activity
    {


        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.ToolBelt);

        }


        //Code That Opens The Math Part!

        [Java.Interop.Export("math")] // The value found in android:onClick attribute.
        public void btnOneClick4(View v) // Does not need to match value in above attribute.
        {

            var intent = new Intent(ApplicationContext, typeof(MainActivity));
            intent.PutExtra("page", "Math");
            StartActivity(intent);
        }


        //Code That Opens The Science Part!

        [Java.Interop.Export("science")] // The value found in android:onClick attribute.
        public void btnOneClick9(View v) // Does not need to match value in above attribute.
        {

            var intent = new Intent(ApplicationContext, typeof(MainActivity));
            intent.PutExtra("page", "Science");
            StartActivity(intent);
        }



        //Code That Opens The Handwriting  Part!

        [Java.Interop.Export("english")] // The value found in android:onClick attribute.
        public void btnOneClick10(View v) // Does not need to match value in above attribute.
        {

            var intent = new Intent(ApplicationContext, typeof(MainActivity));
            intent.PutExtra("page", "Handwriten");
            StartActivity(intent);
        }



        //Code That Opens The Flascards  Part!

        [Java.Interop.Export("flashcard")] // The value found in android:onClick attribute.
        public void btnOneClick11(View v) // Does not need to match value in above attribute.
        {

            var intent = new Intent(ApplicationContext, typeof(MainActivity));
            intent.PutExtra("page", "Flashcards");
            StartActivity(intent);
        }

        //Code That Opens The Internet  App!

        [Java.Interop.Export("web")] // The value found in android:onClick attribute.
        public void btnOneClick8(View v) // Does not need to match value in above attribute.
        {
            var uri = Android.Net.Uri.Parse("http://www.google.com");
            var intent = new Intent(Intent.ActionView, uri);
            StartActivity(intent);
        }



        //Code That Opens The Gmail App!

        [Java.Interop.Export("email")] // The value found in android:onClick attribute.
        public void btnOneClick3(View v) // Does not need to match value in above attribute.
        {
            var intent = PackageManager.GetLaunchIntentForPackage("com.google.android.gm");
            StartActivity(intent);
        }



        //Code That Opens The Books App!

        [Java.Interop.Export("books")] // The value found in android:onClick attribute.
        public void btnOneClick5(View v) // Does not need to match value in above attribute.
        {
            var intent = PackageManager.GetLaunchIntentForPackage("com.google.android.apps.books");
            StartActivity(intent);
        }

    }
}

这是 MainActivity 机器人代码:

using System;

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
using AppName.Droid;
using AppName.Data;

[assembly: Xamarin.Forms.Dependency(typeof(MainActivity))]
namespace AppName.Droid
{
    [Activity(Label = "AppName", Icon = "@drawable/ic_launcher", Theme = "@style/MyTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, SchoolTools.PackageInterface
    {
    protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);

        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            var page = Intent.GetStringExtra("page");
            LoadApplication(new App(page));


        }

        public IList<Apps> GetInstalledApps()
        {
            IList<Apps> apps = new List<Apps>();
            var pkgInfos = global::Xamarin.Forms.Forms.Context.PackageManager.GetInstalledPackages(PackageInfoFlags.Activities);
            foreach(var pi in pkgInfos)
            {
                // skip system packages
                if (pi.ApplicationInfo.DataDir.StartsWith("/data/user/"))
                {
                    Apps app = new Apps(pi.ApplicationInfo.LoadLabel(global::Xamarin.Forms.Forms.Context.PackageManager).ToString(), pi.PackageName);
                    if (!apps.Contains(app))
                    {
                        apps.Add(app);
                    }
                }
            }
            return apps;
        }

        public bool Launch(string package)
        {
            var intent = Application.Context.PackageManager.GetLaunchIntentForPackage(package);
            bool retVal = IsIntentAvailable(intent);
            if (retVal)
            {
                intent.AddFlags(ActivityFlags.NewTask);
                Application.Context.StartActivity(intent);
            }
            return retVal;
        }

        private static bool IsIntentAvailable(Intent intent)
        {
            return intent != null && Application.Context.PackageManager.QueryIntentActivities(intent, 0).Count != 0;
        }
    }
}

这是我的 app.cs 代码:

using System;

using Xamarin.Forms;

namespace AppName
{
    public class App : Application
    {

        public App(string pageName = "AppNameHome")
        {
            switch (pageName)
            {
                case "Math":

                    MainPage = new NavigationPage(new MathPage());

                    break;


                    case "Science":
                    MainPage = new NavigationPage(new Science.ScienceToolsPage());
                    break;

                        case "Handwriten":
                    MainPage = new NavigationPage(new Handwriting.HandwritingToolsPage());
                    break;

                            case "Flashcards":
                    MainPage = new NavigationPage(new Flashcards.FlashCardHome());
                    break;

                    default:
                    MainPage = new NavigationPage(new AppNameHome());

                    break;


            }



        }

        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
        }
    }
}

任何帮助都会很棒!

提前致谢:)

【问题讨论】:

    标签: c# android xamarin.android xamarin.forms


    【解决方案1】:

    我发现我需要将 SingleInstance 添加到主要活动中的问题是 nohistory = true 这里是解决此问题所需的代码:

    [Activity(LaunchMode = LaunchMode.SingleInstance, NoHistory = true,
     Label = "AppName", Icon = "@drawable/ic_launcher", Theme = "@style/MyTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多