Windows phone開発学習--磁気シール


ある会社を変えてから、windows phoneの開発をしていましたが、幸いにもC#を使っていたので、上手になるのは難しくなく、1週間やっていて、やはり少し面白いと思いました.今週は主にwindows phoneの磁気シール技術を勉強しました.
磁気シールについてはMSDNに詳しく書かれていますが、具体的にはここを参照してください.http://msdn.microsoft.com/zh-cn/library/hh202960(v=vs.92)
私のこのプログラムについて、主に以下の仕事があります.
1、磁気シールの正逆反転を実現する
2、貼り付けユーザーの手動更新を実現する
3、バックグラウンドの任務によって、磁気テープの自動更新を実現する
実は最初の正逆反転は簡単で、あなたは磁気シールに前景と背景を設定して、いろいろな内容、磁気シールは自分で反転を実現します.だから主に後の2時に話します.
Webユーザーの手動更新を実現するには、次の手順に従います.
MSDNを見てみると、磁気シールは2つに分かれています.1つはシステムのデフォルトの1つだけで、1つはユーザーがカスタマイズしたもので、複数あることができます.まず、システムの磁気シールを修正します.コードは以下の通りです.
   //           
        private const string FORE_PIC = "/Images/Background.png";
        private const string BACK_PIC = "/Images/1.png";

        public static void Create(string title, string count, string backtitle, string backcontent)
        {
            ShellTile TileToFind = ShellTile.ActiveTiles.First();

            
                int Counter = 0;
                StandardTileData data = new StandardTileData();

                if (!string.IsNullOrEmpty(title))
                {
                    data.Title = title;
                }
                if (int.TryParse(count, out Counter))
                {
                    data.Count = Counter;
                }
                if (!string.IsNullOrEmpty(backtitle))
                {
                    data.BackTitle = backtitle;
                }
                if (!string.IsNullOrEmpty(backcontent))
                {
                    data.BackContent = backcontent;
                }
                data.BackgroundImage = new Uri(FORE_PIC, UriKind.Relative);
                data.BackBackgroundImage = new Uri(BACK_PIC, UriKind.Relative);
                TileToFind.Update(data);

            

以上の関数でシステムの貼り付けを修正できます.この貼り付けがホームページにpinされるかどうかにかかわらず、この貼り付けは修正されます.実は、ホームページにはシステムの磁気シールが見えませんが、システムの磁気シールはいつも存在しています.それはもともと隠されていました.
ユーザーがカスタムラベルを作成する場合は、コードを変更するだけです.
  //      
                int Counter = 0;

                // StandardTileData      ShellTitle      ,
                //        URI,  ,    。
                StandardTileData myData = new StandardTileData()
                {
                    Title = string.IsNullOrEmpty(title) == true ? string.Empty : title,
                    Count = int.TryParse(count, out Counter) == true ? Counter : 0,
                    BackTitle = string.IsNullOrEmpty(backtitle) == true ? string.Empty : backtitle,
                    BackContent = string.IsNullOrEmpty(backcontent) == true ? string.Empty : backcontent,
                    BackgroundImage = new Uri(FORE_PIC, UriKind.Relative),
                    BackBackgroundImage = new Uri(BACK_PIC, UriKind.Relative)
                };

                ShellTile.Create(new Uri("/MainPage.xaml", UriKind.Relative), myData);

もちろん、ここではユーザが複数の磁気シールを作成する必要がある場合がありますが、区別を表すためにuriで変更することができます.
ShellTile.Create(new Uri("/MainPage.xaml?s=1", UriKind.Relative), myData);  

ただし、そのシールが存在するか否かを判断する必要がある
   ShellTile myTitle = ShellTile.ActiveTiles.FirstOrDefault(m => m.NavigationUri.ToString().Contains("s=1")); 

具体的にはこの文章を見ることができます.http://blog.csdn.net/tcjiaan/article/details/7313866
では、ユーザーがカスタマイズして作成し、磁気シールを更新することで完了します.次に、システムのバックグラウンドで自動的に磁気シールを修正します.
Windows phoneはバックグラウンドプログラムをサポートしていることは明らかです.つまり、現在のプログラムは閉じられていますが、バックグラウンドではプロセスが実行されています.私たちのプログラムが最初に開かれると、バックグラウンドプロセスが起動し、最大実行サイクルは14日、つまり14日以内にメインプログラムが再起動しないと、バックグラウンドプログラムが閉じられます.現在の比較的良い方法では、メインプログラムが起動するたびに、バックグラウンドプロセスの実行サイクルを変更し、毎回更新されることを確認します.
まず、バックグラウンドプロセス制御です.
  public static void SetBackgroundAgent()
        {
            CancelBackgroundAgent();
            PeriodicTask periodicTask = new PeriodicTask(GlobalAttributes.REFRESH_AGENT_NAME);
            periodicTask.Description = "refresh reminders";
            periodicTask.ExpirationTime = DateTime.Today.AddDays(10);


            try
            {
                ScheduledActionService.Add(periodicTask);
                ScheduledActionService.LaunchForTest(periodicTask.Name, TimeSpan.FromSeconds(15));
            }
            catch (InvalidOperationException exception)
            {
                if (exception.Message.Contains("BNS Error: The action is disabled"))
                {
                    MessageBox.Show("Background agents for this application have been disabled by the user.");
                    //agentsAreEnabled = false;
                }
                if (exception.Message.Contains("BNS Error: The maximum number of ScheduledActions of this type have already been added."))
                {
                    // No user action required. The system prompts the user when the hard limit of periodic tasks has been reached.
                }
            }
            catch { }
        }
	public static void CancelBackgroundAgent()
        {
            try
            {
                ScheduledActionService.Remove(GlobalAttributes.REFRESH_AGENT_NAME);
            }
            catch { }
        }

ScheduledSyncTaskAgentに次のコードを追加します.この記事を参照してください.http://www.cnblogs.com/WilsonWu/archive/2011/12/27/2303340.html
		protected override void OnInvoke(ScheduledTask task)
		{


			if (task.Name == GlobalAttributes.REFRESH_AGENT_NAME)
			{
				
                RefreshPlaster(); //      
			}
            else
            {
                NotifyComplete();
            }

		}

磁気シールコードを更新するには、前のコードを呼び出せばいいです.
      public void RefreshPlaster()
        {
            SetPlaster.Create("123","22","fsdfd","dsfd");//          ,          
            NotifyComplete();
        }

Windows phoneでは毎回1つのバックグラウンドタスクしか追加できないので、複数のタスクを実行する必要がある場合は、1つのタスクにしか配置できません.つまり、このようにします.
			if (task.Name == GlobalAttributes.REFRESH_AGENT_NAME)
			{
				RefreshReminder();
                RefreshPlaster();
//...
//...
			}

以上は私自身のいくつかの心得で、実はメッセージプッシュメカニズムを通じて磁気シールを更新することもできますが、私のこのプログラムは必要ありません.具体的なMSDNにはすべてあります.最後にMSDNは本当に強いと言わざるを得ません.