当前位置: 移动技术网 > IT编程>移动开发>WP > 豆瓣电台 for windows phone 7.5开发笔记

豆瓣电台 for windows phone 7.5开发笔记

2018年10月13日  | 移动技术网IT编程  | 我要评论

天玺膏,huangma,泡沫bb霜

 

暑假来深圳实习终于有了点闲钱买了台hd7,一直就想抽空把pc上的豆瓣电台移动到windows phone上,但是总抽不出时间。国庆的时候放假7天,抽了3天的尝试了移植,初步能够实现大部分功能了。很欣慰的是之前的doubanapi只在网络通信部分改动了一些细节,几乎不费任何力气就移植到了wp7上。在开发期间,主要的瓶颈在于后台播放模块,也就是7.1 sdk里新增加的background audio agent类,因此在这里总结一下。

windows phone 7.5的background audio agent在我的理解非常类似于win32窗体的消息回调函数。函数是由开发者自己设计的,但是却不能由开发者的程序调用。两部分代码属于不同的进程(静态类成员不能被共享访问),因为在两部分代码间共享数据就成了最大的问题。起初我是考虑使用独立存储进行通信,但是却不知道为什么总是会出现一边已经只保存了数据,但是另外一边读出来还是旧的数据的情况。后来考虑的方法是利用backgroundaudioplayer.instance静态对象里的tag属性在两部分代码间传递数据。backgroundaudioplayer.instance是backgroundaudio service里最重要的一个对象,一个同时只能有一个backgroundaudio的实例,如果两个应用的都使用了后台播放服务,后启动的就会把之前的一个覆盖掉。

关于tag共享部分的代码如下

public static void changetracktag(int tagindex, string newtag)

{

    if (backgroundaudioplayer.instance.track == null)

    {

        backgroundaudioplayer.instance.track = new audiotrack(

            new uri("https://douban.fm"),

            "",

            "",

            "",

            null,

            "|||||",

            enabledplayercontrols.pause | enabledplayercontrols.skipnext

       );

    }

    

    string[] tags = backgroundaudioplayer.instance.track.tag.split('|');

    tags[tagindex] = newtag;

 

    for (int i = 0; i < tags.length - 1; ++i)

    {

        tags[i] += "|";

    }

 

    audiotrack at = backgroundaudioplayer.instance.track;

    backgroundaudioplayer.instance.track = new audiotrack(

        new uri("https://douban.fm"),

        at.title,

        at.artist,

        at.album,

        at.albumart,

        string.concat(tags),

        enabledplayercontrols.pause | enabledplayercontrols.skipnext

    );

    

}

 

public static string gettracktag(int tagindex)

{

    if (backgroundaudioplayer.instance.track == null)

        return "";

    try

    {

        return backgroundaudioplayer.instance.track.tag.split('|')[tagindex];

    }

    catch

    {

        return "";

    }

}

目前的代码里是利用这样的方法实现两部分代码数据交换,今天求教了一高人,回复说用mvvm可以完美解决这个问题。看来又要花时间看资料了,不过这段时间工作太忙,暂时不会再update,像以前的code一样烂尾算了。

本来打算把代码放到google code的平台上,但是貌似这几天gfw抽风,怎么commit都失败,所以直接打包放下载里了,有兴趣的同学可以去下载一下。有什么好的解决上面问题的方法也不吝赐教,谢谢。

之是之前发在智机网上的版本:https://www.wpxap.com/thread-173201-1-1.html

google code:https://code.google.com/p/lemanz-douban-radio/downloads/detail?name=douban_wp.7z&can=2&q=#makechanges

 

摘自 博比的杂货间

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网