2013年3月3日 星期日

升級 8.0 SDK 後發現的一些變化

手上有一個 Windows Phone 的專案在前陣子將專案設定中的 "目標 Windows Phone OS 版本" 由原本的 7.1 轉為 8.0,轉換過程沒什麼異常,倒是佈屬到 8.0 的手機上時發現一些功能失效了,故以此篇來記錄目前發現的差異 API 及處理方法。

1. CellularMobileOperator
在 8.0 之前如果我們要判斷用戶的 SIM 卡是哪間電信商的,可以利用 DeviceNetworkInformation.CellularMobileOperator 來得知電信商的英文名稱,在 8.0 也是用一樣的方法,但是回傳值有變化,我以中華電信舉例如下

NetworkInterfaceType netInterfaceType = NetworkInterface.NetworkInterfaceType;
if (netInterfaceType == NetworkInterfaceType.MobileBroadbandGsm)
{
    if (DeviceNetworkInformation.IsNetworkAvailable &&
        DeviceNetworkInformation.IsCellularDataEnabled &&
        "chunghwa".Equals(DeviceNetworkInformation.CellularMobileOperator.ToLower()))
    {
        // 中華電信用戶
    }
}

// 8.0 裝置下,回傳值改為中文了,請改成 "中華電信".equals() 來判斷
String strOperator = DeviceNetworkInformation.CellularMobileOperator; // strOperator = 中華電信

2. BackgroundAudioPlayer.PlayState 細分
在 8.0 之前 PlayState 只有一種,但在 8.0 開始雖然也是可以在 PlayStateChanged 接到狀態改變的事件,但細分為兩種,有些狀態也換位置了,例如 TrackEnded 就必須從 IntermediatePlayState 取到,用舊的方法會攔不到歌曲結束事件,例如

private void AudioPlayerPlayStateChanged(object sender, EventArgs e)
{
    // 老方法
    switch (BackgroundAudioPlayer.Instance.PlayerState)
    {
        case PlayerState.Unknow:
            break;
    }

    // 新方法
    PlayStateChangedEventArgs newEvent = (PlayStateChangedEventArgs)e;
    PlayState current = newEvent.CurrentPlayState;
    PlayState inter = newEvent.IntermediatePlayState;
}

3. Windows Phone 8 App 沒有強制開發者必須指定 Splash 畫面,所以如果使用 Windows Phone 8 SDK 建立專案,不會有之前的專案的 SplashScreenImage.jpg 圖檔,若想要做 Splash 畫面必須自行利用 PhoneApplicationPage 製作,當然這個 Page 也會被加到 Navigation Queue 中,所以如果不想讓用戶在使用 Back 鍵時再看到 Splash 鍵,可以在 App 的首頁利用 Application 類別新加入的 Method 來關閉自己

// 8.0 裝置允許開發者關閉自己的 App
Application.Current.Terminate();

更正:在目錄中加入 SplashScreenImage.jpg 即可為 8.0 App 加入 Splash

參考:http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff769511(v=vs.105).aspx
Windows Phone 8 apps load quickly, so a Windows Phone 8 app usually doesn’t need a splash screen. New Windows Phone 8 projects don’t include a default splash screen image file. However, if you want to use a splash screen in your Windows Phone 8 app, add an existing JPG image file to the root folder of your Windows Phone 8 project, and name the file SplashScreenImage.jpg.

參考:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206974(v=vs.105).aspx

If you want to provide pixel-perfect splash screens for all resolutions, you can add images with the following file names:
SplashScreenImage.Screen-WVGA.jpg
SplashScreenImage.Screen-WXGA.jpg
SplashScreenImage.Screen-720p.jpg


4. 在開啟 7.5 SDK 的新專案時 ID_CAP_GAMERSERVICES 是預設勾選的,如果轉移到 8.0 時該功能選項並不會被移除,但上架時會被靜態分析擋下來,訊息如下:
2008: We don’t allow the capability you’ve specified: ID_CAP_GAMERSERVICES.


沒有留言:

張貼留言