<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>wp7 &#8211; 天地一沙鸥</title>
	<atom:link href="https://haoluobo.com/tag/wp7/feed/" rel="self" type="application/rss+xml" />
	<link>https://haoluobo.com</link>
	<description>to be continue....</description>
	<lastBuildDate>Thu, 16 Dec 2021 03:34:49 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>WP7开发初体验 &#8212; WP7版“百度.ting”开发记录</title>
		<link>https://haoluobo.com/2012/07/lb-ting-start/</link>
					<comments>https://haoluobo.com/2012/07/lb-ting-start/#comments</comments>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Wed, 25 Jul 2012 14:08:37 +0000</pubDate>
				<category><![CDATA[vicalloy的庄家]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[lb.ting]]></category>
		<category><![CDATA[wp7]]></category>
		<guid isPermaLink="false">/?p=10622</guid>

					<description><![CDATA[项目地址： lb.ting(github)如果你有WP7手机，可以下载XAP文件体验一下：lb.ting.xa [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><img decoding="async" src="/wp-content/uploads/2012/07/lb.ting_.png"><br>项目地址： <a href="https://github.com/vicalloy/lb.ting">lb.ting(github)</a><br>如果你有WP7手机，可以下载XAP文件体验一下：<a href="/wp-content/uploads/2012/07/lb.ting_.xap_.zip">lb.ting.xap</a></p>



<h3 class="wp-block-heading">序</h3>



<p>感觉已经有段时间没有接触过什么新技术了，或许也是想看看自己接触一项全新的技术需要多少时间来熟悉。近来想看看WP7开发。<br>上周在MSDN简单的看过一些WP7开发文章后决定动手做自己的地一个WP7应用。因为只是想简单的体验一下WP7开发，因此跳过系统学习的阶段直接动手。<br>这次想做的是百度.ting的WP7客户端。虽然虾米电台、豆瓣电台等电台网站/软件已经一大堆了，但百度.ting还是有自己的优势。百度电台的的音乐码率普遍为128k，比其他电台要好出不少。大多音乐电台支持直接手机访问，直接浏览器访问无法实现音乐的后台播放。<br>C#刚出时大家评价C#是Delphi和Java的杂交产物。我虽没什么C#的开发经验，但相信凭自己的Java与Delphi经验应付一般的C#代码还是没多少问题的。电台软件的功能以及技术点都不多，我很乐观的想周末在家宅个两天，折腾出地一个基础版本。显然，这个计划已经失败。接触一项新技术的遇到的问题远比我想象的要多，中间也走了不少弯路。<br>目前第一个初步可用的版本已经完成。我会将代码放到github上。我希望在接下来一段时间里对这个应用再进行一些优化，然后上线到WP7的商店。<br>下面的文章里会我记录下一些我遇到的问题。</p>



<h3 class="wp-block-heading">准备工作，知识储备</h3>



<p>微软在帮助文档方面做的非常的好，你可以很容易找到自己需要的资料。</p>



<ul class="wp-block-list"><li><a href="http://msdn.microsoft.com/zh-cn/windowsphone/default.aspx">Windows Phone 开发者中心</a> WP7的大本营
<ul>
<li><a href="http://msdn.microsoft.com/zh-CN/windowsphone/ff955788">Window Phone 7 开发基础</a> 介绍了WP7最基础的一些概念</li>
</ul>
</li><li><a href="http://msdn.microsoft.com/library/ff402535.aspx">Windows Phone 开发 技术资源库</a> WP7开发的各类资源。技术文档，代码范例等。特别是里面的范例程序都配有相关的技术文档，非常应用。
<ul>
<li><a href="http://msdn.microsoft.com/zh-cn/library/ff431744(v=vs.92)#BKMK_Media">媒体 &#8211; 后台音频播放器示例</a> 后台播放是电台应用最重要的功能之一，这个范例自然是必看的。</li>
</ul>
</li><li><a href="http://dbfm7.codeplex.com/">豆瓣电台WP7客户端（开源）</a> 从里面可以学到如何从网上获取json数据并进行解析。不支持后台播放是这个客户端的一个比较大的缺陷。</li></ul>



<h3 class="wp-block-heading">开发过程中遇到的相关问题以及解决方案</h3>



<h4 class="wp-block-heading">百度.ting API</h4>



<p>直接用FireBug对百度播放器的请求进行分析，可以很轻松的得到大部分API。这些API中唯独缺少电台列表的API。该问题最简单的解决方案是直接分析网页获取到电台列表，然后在程序里写死。另外还可以让程序对电台首页的html代码进行分析，从中提取电台列表。方案一，感觉有些傻。方案二实现起来又过麻烦。于是有了方案三。<br>百度.ting有官方的Android客户端，而Android程序是比较容易反编译的。使用 <a href="http://dedexer.sourceforge.net/">Dedexer</a> 反编译后，得到相关API。Android客户端和web版本电台使用的并不是同一套API，而且从接口的参数类型上看服务端似乎用的是Java。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
//主要接口
//获取频道列表
http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.radio.getCategoryList&amp;amp;format=json
//获取频道歌曲列表
http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.radio.getChannelSong&amp;format=json
//获取专辑的歌曲列表
http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.radio.getArtistChannelSong&amp;format=json
//获取歌曲的详细信息
http://ting.baidu.com/data/music/links?songIds=

</pre></div>


<h4 class="wp-block-heading">JSON解析</h4>



<p>最初我希望JSON能被自动解析成LIST/MAP类型的结构，查了一轮并没有找到比较好的解决方案。在C#中JSON都需要和对象进行绑定。如果手动为所有JSON数据创建相关的数据类，无疑是意见很麻烦的时。我相信我并不是遇到该困扰的第一人。果然网上已经有不少C#的JSON工具。<br><a href="http://json2csharp.com/">json2csharp</a> 只要你输入json，改网站会自动帮你生成相关的数据类。</p>



<h4 class="wp-block-heading">配置文件的存储</h4>



<p>大多应用程序都需要保存一些自定义的配置数据。在WP7.1后，本地数据的使用变得非常的简单。本地数据库的使用可以参考 <a href="http://msdn.microsoft.com/zh-cn/library/hh286405(v=vs.92)">如何使用 MVVM 为 Windows Phone 创建本地数据库应用程序</a><br>lb.ting最终方案中并没有使用本地数据库。我采用了直接将JSON数据持久化的做法进行数据存储。直接持久化JSON的方案在数据的可靠性比较差，且配置文件格式的修改会成问题。JSON持久化的方案胜在够简单。</p>



<h4 class="wp-block-heading">后台音频播放</h4>



<p>WP7不支持后台进程，为了保证音频的后台播放需要为应用创建对应的后台音频播放代理。按照通常的理解，动态更新播放列表是一个必须的功能。WP7的后台播放代理还就没有更新播放列表的API。在MSDN的例子中播放列表直接写死在程序里。<br>去网上转了一圈也并没有找到比较好的解决方案。网上的建议是将播放列表保存在数据库或本地文件中，通过创建一个“中间层”的方式同前台UI进行交互。lb.ting最终采用了将播放列表持久化到本地存储区的方案。</p>



<h4 class="wp-block-heading">baidu图片获取</h4>



<p>专辑封面在浏览器可以正常显示，客户端则无法显示专辑图片。怀疑是代码的问题，于是将图片源换为豆瓣，图片正常显示。一通折腾，发现是百度的防盗链引起。将图片的加载换为WebClient实现。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: csharp; title: ; notranslate">
public static void SetImageUrl(Image img, Uri uri, Uri defaultUri)
{
    WebClient wc = new WebClient();
    wc.Headers&#x5B;&quot;Referer&quot;] = &quot;http://www.baidu.com&quot;;
    BitmapImage bi = new BitmapImage();
    img.Source = bi;
    wc.OpenReadCompleted += (s, e) =&gt;
    {
        try
        {
            bi.SetSource(e.Result);
        }
        catch (Exception)
        {
            //bi.UriSource = defaultUri;
        }
    };
    wc.OpenReadAsync(uri);
}

</pre></div>]]></content:encoded>
					
					<wfw:commentRss>https://haoluobo.com/2012/07/lb-ting-start/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>最近想做的一些东西</title>
		<link>https://haoluobo.com/2011/12/xiami-wp7-timeline/</link>
					<comments>https://haoluobo.com/2011/12/xiami-wp7-timeline/#comments</comments>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Tue, 20 Dec 2011 15:32:59 +0000</pubDate>
				<category><![CDATA[vicalloy的庄家]]></category>
		<category><![CDATA[timeline]]></category>
		<category><![CDATA[wp7]]></category>
		<guid isPermaLink="false">/?p=10305</guid>

					<description><![CDATA[由于长期的挖坑不填，于是想做简单一些的东西，简单到一周之内可以完成。 WP7的虾米电台客户端 虾米的电台很不错 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>由于长期的挖坑不填，于是想做简单一些的东西，简单到一周之内可以完成。</p>
<h3>WP7的虾米电台客户端</h3>
<p><a href="http://www.xiami.com/" target="_blank" rel="noopener">虾米</a>的电台很不错，有多种风格的电台可以选择。选择一个自己喜欢的电台然后有啥听啥，比自己选歌来的方便的多。目前虾米有官方的ios、android的客户端，wp7的客户端暂时还没有。虽然手机可以用网页版的虾米，不过网页版无法后台播放将是一个很大的缺陷。</p>
<p>我还没有wp7的手机，想做着东西主要还是想体验一下wp7开发。</p>
<h3>timeline在线制作</h3>
<p>世界历学的很烂，完全不知道国外的重大历史事件对应到中国的朝代。想做这么一张历史年表，将国内外的大事件都标记在上面。顺带想做一个关于timeline的网站。用户可以制作自己的timeline并进行分享。最好还可以象wiki一样大家共同编辑同一个timeline。</p>
<p>前期会做的很简单，只有简单的创建和展示功能。评论功能直接使用<a href="http://disqus.com/" target="_blank" rel="noopener">disqus</a>实现。</p>
<p>目前国外网站已经有一些提供在线timeline服务的网站。里面大多网站都面向企业用户提供收费服务。其中比较接近我想法的是<a href="http://www.xtimeline.com/" target="_blank" rel="noopener">xtimeline</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://haoluobo.com/2011/12/xiami-wp7-timeline/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
