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つはユーザーがカスタマイズしたもので、複数あることができます.まず、システムの磁気シールを修正します.コードは以下の通りです.
以上の関数でシステムの貼り付けを修正できます.この貼り付けがホームページにpinされるかどうかにかかわらず、この貼り付けは修正されます.実は、ホームページにはシステムの磁気シールが見えませんが、システムの磁気シールはいつも存在しています.それはもともと隠されていました.
ユーザーがカスタムラベルを作成する場合は、コードを変更するだけです.
もちろん、ここではユーザが複数の磁気シールを作成する必要がある場合がありますが、区別を表すためにuriで変更することができます.
ただし、そのシールが存在するか否かを判断する必要がある
具体的にはこの文章を見ることができます.http://blog.csdn.net/tcjiaan/article/details/7313866
では、ユーザーがカスタマイズして作成し、磁気シールを更新することで完了します.次に、システムのバックグラウンドで自動的に磁気シールを修正します.
Windows phoneはバックグラウンドプログラムをサポートしていることは明らかです.つまり、現在のプログラムは閉じられていますが、バックグラウンドではプロセスが実行されています.私たちのプログラムが最初に開かれると、バックグラウンドプロセスが起動し、最大実行サイクルは14日、つまり14日以内にメインプログラムが再起動しないと、バックグラウンドプログラムが閉じられます.現在の比較的良い方法では、メインプログラムが起動するたびに、バックグラウンドプロセスの実行サイクルを変更し、毎回更新されることを確認します.
まず、バックグラウンドプロセス制御です.
ScheduledSyncTaskAgentに次のコードを追加します.この記事を参照してください.http://www.cnblogs.com/WilsonWu/archive/2011/12/27/2303340.html
磁気シールコードを更新するには、前のコードを呼び出せばいいです.
Windows phoneでは毎回1つのバックグラウンドタスクしか追加できないので、複数のタスクを実行する必要がある場合は、1つのタスクにしか配置できません.つまり、このようにします.
以上は私自身のいくつかの心得で、実はメッセージプッシュメカニズムを通じて磁気シールを更新することもできますが、私のこのプログラムは必要ありません.具体的なMSDNにはすべてあります.最後にMSDNは本当に強いと言わざるを得ません.
磁気シールについては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は本当に強いと言わざるを得ません.