Hololens開發初探踩的一些坑


  微軟官方對HoloLens的開發提供了兩種常用方法,使用VS2015和Unity HoloLens專用版本。其中VS方式可以利用通用Windows模版Holographic DX11 App生成框架代碼,Unity方式可以導入HoloToolkit這個官方推薦的工具集加速開發。

       HoloLens運行在Win10系統,其應用程序為UWP App,這種App的權限受到比較大的限制,使用API時務必在Package.appxmanifest或unity設置里申請對應權限。此外,由於HoloLens生態還未成熟,微軟目前對其做出了更多的限制,這些限制通常是由於設備特殊性或功能暫未集成造成,有些限制會在未來的版本解除。當前限制可參考:

  1.Current limitations for apps using APIs from the shell

  2.App model

 

  此外,以下記錄實際操作中遇到的一些細節問題,供大家參考。特別注意,曾親歷過同樣的API在舊版系統拋異常,但更新系統后可用的情況。因此在不同版本環境下可能出現不同結果,記錄問題時使用的環境如下:

開發環境:Win10 X64 10586版本, VS 2015 update3, Unity 5.4.0b24-HTP

HoloLens:10.0.14342.1018版本

 

一、文件系統

  a.KnownFolder路徑獲取方式的異同

  UWP程序的文件操作使用Windows.Storage命名空間的API,其中最常用的一個類為KnownFolders。這個類包括常用目錄的屬性和獲取目錄的方法,例如相機膠卷目錄這個常用目錄,可以使用兩種方式獲取,返回類型都為StorageFolder。

  1. 使用屬性KnownFolders.CameraRoll
  2. 使用方法KnownFolders.GetFolderForUserAsync(null, KnownFolderId.CameraRoll); 第一個參數為User,通過微軟在Github的Sample Code可知指定null代表當前用戶。

  當前MSDN文檔並未說明二者的區別,實際使用時會發現返回值中的路徑域有所不同:

  方法1為C:\Data\Users\DefaultAccount\Pictures\Camera Roll

  方法2為C:\Data\Users\DefaultAccount\AppData\Roaming\Microsoft\Windows\Libraries\ CameraRoll.library-ms

  注意:

  如使用Windows.Storage的文件類StorageFile來操作枚舉目錄中的文件,則兩者沒有區別,文件的路徑並不受目錄路徑影響,都會得到形如方法1的路徑。如(xxxFolder設為前步返回值):

  IReadOnlyList<StorageFile> fileList = await xxxFolder.GetFilesAsync();

  foreach (StorageFile file in fileList) { /* file.path is the same */ }

  但是,如果需要使用目錄路徑來拼路徑,則需注意!例如Unity的WWW需要路徑參數,這里的目錄路徑需使用方法1的返回路徑,使用b會導致無效參數的錯誤。

 

  b.暫不能操作的常見目錄

  結果:讀取即可導致拋異常。

   KnownFolderId.HomeGroup 

   KnownFolderId.MediaServerDevices 

   KnownFolderId.RemovableDevices

 

  c.拷貝API的異常

  結果:目標目錄已含被拷貝文件,會導致異常。

  如拷貝xFile到xFolder:

  xFile.CopyAsync(xFolder) // Exeption if xFolder already has xFile

  如需強行拷貝需使用如下方法:

  xFile.CopyAsync(xFolder, xName, NameCollisionOption.ReplaceExisting);

  但有個例外,即xFile就在xFolder目錄時,上述API仍然會異常。

 

  d.DP權限問題

  使用DevicePortal從電腦傳入HoloLens的文件,權限設置存在問題,普通App無權訪問。訪問即拋System.UnauthorizedAccessException。

  如:向相機目錄傳入一張合格照片,Hololens的內置Photo應用是看不到此照片的。

 

二、權限問題

  a.位置權限

  調用GPS相關API,程序的manifest指定了Location權限,在首次運行時仍然需要一次確認,Hololens App可以調用Launcher.LaunchUriAsync(new Uri("ms-settings:privacy-location"))把系統設置的隱私頁彈出,讓用戶選擇允許。操作之后,在模擬器下才可以得到准確的經緯度信息。

 

  b.用戶賬戶信息權限

  雖然此功能並未列在Hololens官方的限制列表,實測時發現用戶賬戶信息枚舉不到,但同樣代碼在普通Win10設備可以成功獲取。這一點也作為試出的當前差異,列此備忘。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM