• WP7:一键重启


    关于在WP7上使用 ‘native code’ ,相信都有所了解或者有所听说了,也就是 使用C++ DLL,关于有关资料,可以去http://blog.walshie.me/2010/11/12/windows-phone-7-native-apps-the-missing-link/ 这里看一下。

    进入正题。

    写一个一键重启的小程序,小试一下。

    新建一个工程。然后添加两个必备的东西。

    呵呵,不用说肯定是要引用的DLL。

    就是这个,一个别人写好的DLL,拿来引用下。

    还有一个是封装好的库,C#写的,方便调用方法。

    然后呢,就开始动工了。

    前台代码:

    1 <!--ContentPanel - place additional content here-->
    2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    3 <ToggleButton Height="202" HorizontalAlignment="Center" Margin="0,189,0,0" Content="{Binding IsChecked,ElementName=toggleButton}" IsChecked="False" Name="toggleButton" VerticalAlignment="Top" Width="202" Click="toggleButton_Click" />
    4 </Grid>

    呵呵,非常简单,一个ToggleButton,用来显示状态。

    一键重启,就是把程序 pin 到桌面,点击生成的 Tile 就直接重启。不用在进入程序了。

    为了达到更好的效果呢,我们把闪屏 delete 掉。

    下面来写方法。

     1 void CreateTile()
    2 {
    3 ShellTile tile = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("Reboot"));
    4 if (tile == null)
    5 {
    6 StandardTileData data = new StandardTileData
    7 {
    8 BackgroundImage = new Uri("/Images/reboot.png", UriKind.Relative),
    9 Title = ""
    10 };
    11 ShellTile.Create(new Uri("/MainPage.xaml?Reboot=true", UriKind.Relative), data);
    12 }
    13 }

    这个是用来生成桌面Tile的方法。很简单,要注意的是 create 的 Tile 的 Uri 后面要加个参数。

    因为要想实现点击桌面Tile,直接进行重启,而不是进入程序,需要有一个判断。所以这里是关键。

    下面是删除 Tile 方法:

    1 void DeleteTile()
    2 {
    3 ShellTile TileToFind = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("Reboot=true"));
    4
    5 if (TileToFind != null)
    6 {
    7 TileToFind.Delete();
    8 }
    9 }

    这个也是根据后面的参数删除相应的桌面 Tile 。而不是删掉长按程序而产生的 Tile。

    在toggleButton的Click事件里调用这两个方法。

     1 private void toggleButton_Click(object sender, RoutedEventArgs e)
    2 {
    3 if (toggleButton.IsChecked == true)
    4 {
    5 CreateTile();
    6 }
    7 else
    8 {
    9 DeleteTile();
    10 }
    11 }

    前面说到,实现的效果是点击桌面 Tile 就直接进行重启,而不是进入程序,所以就要根据参数来判断了,实现这个过程是在 程序 一进入的时候。

    也就是 OnNavigatedTo。因为 OnNavigatedTo 比 Loaded 事件 要先发生。

     1 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    2 {
    3 base.OnNavigatedTo(e);
    4 string str;
    5
    6 if (NavigationContext.QueryString.TryGetValue("Reboot", out str))
    7 {
    8 Shell.Reboot();
    9 }
    10
    11 toggleButton.IsChecked = IsPin();
    12 }

    用到 QueryString.TryGetValue 判断 这个KEY 是不是有值。

    如果有值,则进行重启。

    那 Shell.Reboot() 这个方法呢,就是要调用的重启方法。

    需要应用上面说的那个C#封装好的DLL。

    using NativeAccess.Shell;
    

    这个DLL 里还有很多的方法。就不一一叙述了,可以自己下载后面的 DEMO 去了解。

    上面代码最下面还有一个 IsPin() 方法,一个布尔类型的。

    它是用来 更新 toggleButton 的 选择状态的。

    1 bool IsPin()
    2 {
    3 ShellTile TileToFind = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("Reboot=true"));
    4 if (TileToFind == null)
    5 return false;
    6 return true;
    7 }

    好了,写完了,有兴趣的可以试一下。补充一点,此程序只能在真机上运行才能到达效果。

     Reboot.zip









     世界不会在意你的自尊,人们看的只是你的成就。在你没有成就以前,切勿过分强调自尊。——比尔·盖茨
  • 相关阅读:
    10月27号
    10月23号
    10月26号
    10月30号
    10月28号
    10月29号
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
  • 原文地址:https://www.cnblogs.com/Walsh/p/2289420.html
Copyright © 2020-2023  润新知