最近在忙Asp.Net MVC開發一直沒空更新UWP這塊,不過有時間的話還是需要將自己的經驗和大家分享下,以求共同進步。
在上章【UWP開發之Template10實踐:本地文件與照相機文件操作的MVVM實例(圖文付原代碼)】已經談到了使用FileOpenPicker進行文件選擇,以及CameraCaptureUI進行拍照。
對於文件選擇一般進行如下設置就能實現:
// 選擇多個文件 FileOpenPicker openPicker = new FileOpenPicker(); openPicker.ViewMode = PickerViewMode.Thumbnail; openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; openPicker.FileTypeFilter.Clear(); openPicker.FileTypeFilter.Add("*"); var files = await openPicker.PickMultipleFilesAsync();
對於拍照功能我想大家一般都只做到如下的設置:
// 拍照 CameraCaptureUI captureUI = new CameraCaptureUI(); captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Png; captureUI.PhotoSettings.AllowCropping = false; var photo = await captureUI.CaptureFileAsync(CameraCaptureUIMode.Photo); if (photo != null) { // 文件操作(移動除外)
}
如果你只對照片進行了移動以外的操作,您的應用會隨着時間推移越來越占用空間?
因為拍照功能會緩存照片文件,如果應用退出時不做清理就很可能會一直留在TempState文件夾中,隨着時間推移積累的照片就會越來越多,同時這樣也容易導致應用泄密個人信息。
比如【UWP開發之Template10實踐:本地文件與照相機文件操作的MVVM實例(圖文付原代碼)】做的應用,現在去查看應用的TempState文件夾,拍的照片居然還在,很可怕對不對?
對於UWP的數據存儲有必要看看微軟的介紹:https://msdn.microsoft.com/zh-cn/library/windows/apps/hh464917
TempStae和LocalCache的區別:http://stackoverflow.com/questions/34046509/what-is-the-difference-and-similarity-if-any-between-localcache-and-tempstate
對於TempState臨時應用數據微軟的說法是:
臨時應用數據存儲類似於緩存。它的文件不會漫游,隨時可以刪除。系統維護任務可以隨時自動刪除存儲在此位置的數據。用戶還可以使用“磁盤清理”清除臨時數據存儲中的文件。 臨時應用數據可用於存儲應用會話期間的臨時信息。無法保證超出應用會話結束時間后仍將保留此數據,因為如有需要,系統可能回收已使用的空間。
---也就是說如果系統沒有及時清理,這個數據就一直存在(就如本人電腦的情況)!---正是由於這個原因才有必要手動做清除處理!
正確使用臨時目錄(拍照功能等):
大概步驟:應用啟動,清理臨時目錄(如果是從掛起恢復忽略此步),臨時目錄中文件操作(如啟動拍照等),應用退出,清理臨時目錄(如果應用掛起時忽略此步)
代碼如下:
try { await ApplicationData.Current.ClearAsync(ApplicationDataLocality.Temporary); } catch { // 清理臨時目錄異常時不做任何處理 }
代碼位置根據實際應用合理選擇!