首页 > 代码库 > Windows Phone 8 APP 移植到Windows Phone 8.1 常见问题总结
Windows Phone 8 APP 移植到Windows Phone 8.1 常见问题总结
前言(一些废话哈,可以略过)
wp8.1的SDK相对8.0的还是变化不少的,类改变了很多,我就是我遇到的一些问题总结下,大家有用到的可以少走些弯路,一些东西国内都搜不到
(做这个人少,资料少,开始移植到wp8.1的也少些),建议小伙伴们google,或者关键字用英文搜索比较好,其实我大多都在stackoverflow找到的,
看官方文档也可以,但是就比较慢了。
正文
MessageBox被MessageDialog取代了具体用法如下(有些变量名是随手写的,没经过思考。。。大家可以改下)
public async static void ShowCustomDialog(string title, string mes, string ok, Action ok_callback, string cancel, Action cancel_callback) { MessageDialog c = new MessageDialog(mes,title); UICommand ok_cmd = new UICommand(ok); ok_cmd.Invoked += (dd) => { if (ok_callback != null) { ok_callback.Invoke(); } }; UICommand canle_cmd = new UICommand(cancel); ok_cmd.Invoked += (dd) => { if (cancel_callback != null) { cancel_callback.Invoke(); }; }; c.Commands.Add(ok_cmd); c.Commands.Add(canle_cmd); IUICommand result = await c.ShowAsync(); }
获取设备基本信息的类DeviceStatus被EasClientDeviceInformation取代基本用法如下
public static string GetDeviceInfo() { Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation deviceInfo = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation(); var firmwareVersion = deviceInfo.SystemFirmwareVersion; string d = "{\"devicename\":\"" + deviceInfo.SystemProductName + "\",\"deviceManufacturer\":\"" + deviceInfo.SystemManufacturer + "\"}"; return d; }
获取设备唯一ID的类DeviceExtendedProperties.TryGetValue("DeviceUniqueId", out uniqueId))被HardwareIdentification取代,具体使用如下
public static string GetDeviceUniqueID() { HardwareToken token = HardwareIdentification.GetPackageSpecificToken(null); IBuffer hardwareId = token.Id; HashAlgorithmProvider hasher = HashAlgorithmProvider.OpenAlgorithm("MD5"); IBuffer hashed = hasher.HashData(hardwareId); string hashedString = CryptographicBuffer.EncodeToHexString(hashed); return hashedString; }
在后台进程中执行UI进程任务时候用到的Deployment.Current.Dispatcher.BeginInvoke 被CoreWindow.GetForCurrentThread().Dispatcher取代,具体用法
var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{ // UI code goes here
});
//or CoreApplication.MainWindow.CoreWindow.Dispatcher.RunAsync( CoreDispatcherPriority.Normal, ()=>{ // UI code goes here});
当前线程睡眠的Thread.Sleep()
被 await Task.Delay(1000)取代
IsolatedStorageSettings被ApplicationData.Current.RoamingSettings取代,IsolatedStorageFile被ApplicationData.Current.LocalFolder;取代,具体使用如下
public class IsolatedStorageHelper { private static ApplicationDataContainer _appSettings= ApplicationData.Current.RoamingSettings; public static T LoadSetttingFromStorage<T>(string Key, T defaultValue) { T ObjToLoad = default(T); if (_appSettings.Values.Keys.Contains(Key)) { ObjToLoad = (T)_appSettings.Values[Key]; } else { ObjToLoad = defaultValue; } return ObjToLoad; } public static void SaveSettingToStorage(string Key, object Setting) { if (!_appSettings.Values.Keys.Contains(Key)) { _appSettings.Values.Add(Key, Setting); } else { _appSettings.Values[Key] = Setting; } } public static bool IsSettingPersisted(string Key) { return _appSettings.Values.Keys.Contains(Key); } public static bool DeleteSettingPersisted(string Key) { while (_appSettings.Values.Keys.Contains(Key)) { _appSettings.Values.Remove(Key); } return false; } public static async Task<bool> AppendStrToFolder(string str) { str = "时间:" + DateTime.Now.ToString() + str; // 获取应用程序数据存储文件夹 StorageFolder applicationFolder = ApplicationData.Current.LocalFolder; // 在指定的应用程序数据存储文件夹内创建指定的文件 StorageFile storageFile = await applicationFolder.CreateFileAsync("LuaPostJsonStr.txt", CreationCollisionOption.OpenIfExists); // 将指定的文本内容写入到指定的文件 using (Stream stream = await storageFile.OpenStreamForWriteAsync()) { byte[] content = Encoding.UTF8.GetBytes(str); await stream.WriteAsync(content, 0, content.Length); } return true; } public static async Task<bool> WriteFile(string filename,string content) { content = "时间:" + DateTime.Now.ToString() + "--------" + content; IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder; IStorageFile storageFile = await applicationFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); try { using (Stream transaction = await storageFile.OpenStreamForWriteAsync()) { byte[] contents = Encoding.UTF8.GetBytes(content); //设置如何打开流的位置有内容就设置流的位置到结束位置 if (transaction.CanSeek) { transaction.Seek(transaction.Length, SeekOrigin.Begin); } await transaction.WriteAsync(contents,0, contents.Length); return true; } } catch (Exception exce) { return false; // OutputTextBlock.Text = "异常:" + exce.Message; } } public static async Task SavePic(UIElement root, string filename) { RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); await renderTargetBitmap.RenderAsync(root); var pixelBuffer = await renderTargetBitmap.GetPixelsAsync(); string path = "picSdk"; StorageFolder storageFolder = ApplicationData.Current.LocalFolder; StorageFolder store = await storageFolder.CreateFolderAsync(path, CreationCollisionOption.OpenIfExists); string ss = Path.Combine(path, filename); StorageFile file = await store.CreateFileAsync(ss); using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite)) { var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream); encoder.SetPixelData( BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)renderTargetBitmap.PixelWidth, (uint)renderTargetBitmap.PixelHeight, DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, pixelBuffer.ToArray()); await encoder.FlushAsync(); } } public static async Task<bool> SaveFile(StorageFile filee) { string path = "picSdk"; StorageFolder storageFolder = ApplicationData.Current.LocalFolder; StorageFolder store = await storageFolder.CreateFolderAsync(path, CreationCollisionOption.OpenIfExists); string ss = Path.Combine(path, filee.Name); StorageFile file = await store.CreateFileAsync(ss); await filee.MoveAndReplaceAsync(file); return true; } public static async Task< BitmapImage> LoadPic(string folderName,string fileName) { BitmapImage source = new BitmapImage(); // Reopen and load the PNG file. if (await IsExistFolder(folderName)) { var folder = ApplicationData.Current.LocalFolder; if (await IsExistFile(fileName,folderName)) { StorageFile file = await folder.GetFileAsync(fileName); using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite)) { var encoder = await BitmapDecoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream); var stream = await encoder.GetPreviewAsync(); source.SetSource(stream); source.CreateOptions = BitmapCreateOptions.None; } } return source; } else { return null; } } public static async Task<bool> IsExistFile(string fileName) { StorageFolder storageFolder = ApplicationData.Current.LocalFolder; try { StorageFile file = await storageFolder.GetFileAsync(fileName); return true; } catch (FileNotFoundException e) { return false; } catch (Exception e) { return false; } } public static async Task<bool> IsExistFile(string fileName,string folderName) { StorageFolder storageFolder = ApplicationData.Current.LocalFolder; StorageFolder folder= await storageFolder.GetFolderAsync(folderName); try { StorageFile file = await folder.GetFileAsync(fileName); return true; } catch (FileNotFoundException e) { return false; } catch (Exception e) { return false; } } public static async Task<bool> IsExistFolder(string folderName) { StorageFolder storageFolder = ApplicationData.Current.LocalFolder; try { StorageFolder file = await storageFolder.GetFolderAsync(folderName); return true; } catch (FileNotFoundException e) { return false; } catch (Exception e) { return false; } } public static async Task< Stream> LoadPicByStream(string filename) { var store = ApplicationData.Current.LocalFolder; if ( await IsExistFile(filename)) { StorageFile file= await store.GetFileAsync(filename); // fileStream.Close(); return (await file.OpenAsync(FileAccessMode.ReadWrite)).AsStream(); } else { return null; } } }
最后这个类,东西比较多哈,有的还没来得及测试,那个小伙伴遇到问题也请告诉我下。耽误大家时间了。
Windows Phone 8 APP 移植到Windows Phone 8.1 常见问题总结