ユーザーの位置を追跡する WP7 アプリがあります。GeoCoordinate ウォッチャーの位置変更イベントで分離ストレージに場所を書き込みたいのですが、「IsolatedStorageFileStream での操作は許可されていません」というメッセージが表示され続けます。誰でもこれを機能させるのを助けることができますか?
座標をファイルに保存するメンバーは次のとおりです。
let xname n = XName.op_Implicit(n)
let xdoc (el: seq<XElement>) = new XDocument(Array.map box (Array.ofSeq el))
let xelem s el = new XElement(xname s, box el)
let xstr s = box s
member this.createLocationsFile latitude longitude =
try
let doc : XDocument =
xdoc
[xelem "root"
[xelem "location"
[(xelem "latitude" (xstr latitude))
(xelem "longitude" (xstr longitude))
]
]
]
use store = IsolatedStorageFile.GetUserStoreForApplication()
if not (store.FileExists("locations.xml")) then
let file = new IsolatedStorageFileStream("locations.xml", IO.FileMode.Create, store)
doc.Save(file)
else
let file = new IsolatedStorageFileStream("locations.xml", IO.FileMode.Open, store)
let docAmended : XDocument = XDocument.Load(file)
let elementToAdd =
docAmended.Element(xname "root").Add(
[xelem "location"
[(xelem "latitude" (xstr latitude))
(xelem "longitude" (xstr longitude))
]
])
docAmended.Save(file)
with
| :? IsolatedStorageException as ex -> MessageBox.Show("Error saving file: " + ex.Message) |> ignore
| _ -> MessageBox.Show("Unable to open file") |> ignore
そして、PositionChangedEventHandler は次のとおりです。
let MyPositionChanged(e : GeoPositionChangedEventArgs<GeoCoordinate>, map : Map, ellipse : Ellipse) =
let ppLoc = new GeoCoordinate(e.Position.Location.Latitude, e.Position.Location.Longitude)
map.SetView(ppLoc, 10.0)
//do layer.AddChild(ellipse, ppLoc)
ellipse.Visibility <- System.Windows.Visibility.Visible
let iso = new IsolatedStorageHelper()
let lat = ppLoc.Latitude.ToString()
let lon = ppLoc.Longitude.ToString()
do iso.createLocationsFile lat lon