2017-02-21 50 views
0

Helo我正在为我的应用程序添加一个辅助功能,当用户在主页按钮上按住时,用户可以点击的卡片打开一个android活动然后打开有问题的xamarin表单页面,例如当单击数学卡时MathPage xamarin表单页面打开这个工作,但如果我有在后台运行的xamarin表单应用程序,它加载主屏幕布局,无论我点击哪个按钮。如果我从多任务中关闭xamarin表单应用程序,并按住home键并点击数学卡片,它将打开MathPage。如何重置Xamarin从Xamarin droid形成导航堆栈协助活动

继承人我的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 
     } 
    } 
} 

任何帮助将是惊人的!

感谢提前:)

回答

0

我想通了,我需要SingleInstance添加到主活动以及问题是nohistory =真正的继承人来解决这个问题所需的代码:

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