Windows Phone 7.1 Locationの使い方攻略

本文详细介绍了Windows Phone 7.1中位置服务的使用方法,包括如何通过GeoCoordinateWatcher类获取设备的地理位置信息,提供了同步和异步两种位置信息获取方式的代码示例,并解释了位置信息的多种来源。

Windows Phone 7.1 Locationの使い方攻略

Location、Location…過去のブログのポストを見ていたら、まとまって説明しているものが無いので、改めて通して紹介します。D1-401のセミナーでも紹介したことだし。

地図やナビゲーション、自分の周辺に関わる何かを扱うアプリケーションでは、位置情報取得は必須です。Windows Phone 7.1にはSystem.Device.Locaiton名前空間に、GeoCoordinateWatcherクラスが用意されていて、デバイスの現在位置の取得が可能です。位置情報というとGPS?って思う人も沢山いらっしゃるでしょう。しかしこのクラス名にはGPSのジの字もありませんね。位置情報は、GPSで取得できるだけでなく、携帯基地局やWifiのルーター等、色々なソースから取得が可能です。純粋に位置情報を取得することを考えると、GPSは位置を取得するための単なる手段であることに気がつくでしょう。

Windows Phoneの位置情報取得機能は、GPSやその他の位置情報取得をひっくるめて位置情報を提供するように作られています。
と、能書きはこれぐらいにして、早速使い方を説明していきます。

先ずは、プロジェクトの参照設定に、System.Deviceコンポーネントを追加します。

プログラムの適切な場所に、

using System.Device;

を書いておきます。
http://blogs.msdn.com/b/hirosho/archive/2011/10/11/windowsphone71sensorprogramingbasis.aspx で説明したセンサーと処理の流れは似ています。同期的な位置情報取得と非同期的な位置情報取得方法をTPOに合わせて選択可能です。

先ずは、同期的な処理から。

var watcher = new GeoCoordinateWatcher(GeoPosiitonAccuracy.Default);
watcher.Start();
var position = watcher.Position;
watcher.Stop();

基本はこれだけ。ただし、watcherのStartメソッドをコールしてから、位置情報が取れるまでは初期化や情報収集などで時間がかかる場合があるので、実際にはStatusプロパティがReadyになるまで待つ必要はあります。
Positionは、Locationというプロパティが用意されていて、その中にLatitude(緯度)、Longitude(経度)が格納されています。他にもいくつかプロパティは用意されているのですが、まx、Altitudeという高度を示すプロパティだけあると、このポストでは行っておくことにします。

さて、非同期処理はといえば、センサーの時と同様、GeoCoordinateWatcherのインスタンスはクラスのメンバー変数として定義しておきます。

private GeoCoordinateWatcher watcher;

初期化フェーズの時に、インスタンスを作成し、位置情報が更新した時にコールされるハンドラーを登録します。

watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
watcher.PositionChanged += new EventHandler<GeoPositionChanged<GeoCoordinate>>(watcher_PositionChanged);

そして、いよいよ位置情報が必要になるタイミングで、

watcher.Start();

をコールして、位置取得処理を開始します。
すると、watcherは、”Initializing”→”Ready"に状態変更(watcher_StatusChangedがコールされ、引数でStatusが渡される)しつつ、”Ready”になって位置情報が取得できたら、watcher_PositionChangedがコールされます。
ハンドラーのコードは以下のようになります。

private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
    Deployment.Current.Dispatcher.BeginInvoke(() =>
    {
        var timestamp = e.Position.Timestamp;
        var location = e.Position.Location;
        var altitude = location.Altitude;    // 高度
        var latitude = location.Latitude;   // 緯度
        var longitude = location.Longitude; // 経度
        ... 各種処理
    });
}

他にも、HorizontalAccuracyやVerticalAccuracyなど、位置情報の誤差なども取得可能です。
そして、使い終わったら、

watcher.Stop();

で、計測を終了します。こちらも無駄に動かしていると電池を食うので、終わったらとっととStopしてくださいね。

以上、位置情報の取得はかなり簡単なのがお分かりかと思います。後は計測した値をどう使うかが腕の見せ所。例えばセンサーの値と組み合わせ、写真を撮った時の位置、デバイスが向いていた方向、姿勢情報も合わせて記録しておいて、後で臨場感あふれる3Dアルバムなんていかが?

转载于:https://www.cnblogs.com/iphone6/archive/2011/11/21/2256963.html

1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值