小学期的作业是使用AS制作一个APP,小组设想的是制作一个仿潮汐的音乐播放APP。在此先感谢github上《仿潮汐APP(番茄钟)》
https://github.com/Lavanidad/Tide和简书《上Android计步模块优化(今日步数)》https://www.jianshu.com/p/cfc2a200e46d的两位作者,为我们提供了宝贵的参考。
在此我先简单介绍我们的APP,主要分为三个module(学习、运动、和睡眠)。通过主页面进入后,可以通过,列举如下:
(1)安卓新版本导包问题。因为使用的是安卓4.0以后的版本,问题多到无法想象,但在一通瞎调后勉强解决了,但v4和v7的包还是导入不成功。本人已经仔细核对过网上的解决方案,build.gradle也添加了相应依赖,但在某个xml文件里还是报Missing classes错误。这个问题在低版本的AS里就不存在,暴风哭泣。
为了解决这个问题,我点开了cardview的包,看到了如下错误:
可以看到红色的import报错。但即便如此,还是弄不明白如何解决。
(2)音乐播放问题。之前我提到过,我们的APP分了三个module,它们共用一个MusicService,但使用的细节有所不同。于是为了区分不同模块,我在不同activity里建立了一个bindServiceConnection方法用于绑定服务,利用intent的Extra功能发送了当前activity的信息,同时onbind方法内记录下来,再通过switch进到不同的代码段。
本以为万无一失,结果运行的时候出现了大问题。例如从睡眠模块转学习模块时,音乐播放并没有发生改变。debug了一下发现,这是因为From_Activity并没有更新,也就是在新的activity重新与service建立联系时,并没有再调用一次onBind方法。
上网认真搜索了以下,看到了这篇博文https://blog.youkuaiyun.com/u013553529/article/details/54754491,在此表达感谢。但是作者讲得再明白抵不住我菜,重点还是没找到对应的解决方法,也不知道还有没有其他解决方案。
(3)AIDL的使用问题。这个就更难受了,因为真的完全遵从网上的教程,但还是不成功。先贴出直接问题所在之处:
onServiceConnected方法里的第一句,iSportStepInterface = ISportStepInterface.Stub.asInterface(service);执行完毕后iSportStepInterface依然为空。由于计步功能的AIDL在外部导入的module里,因此在其AndroidManifest里进行配置
然后通信用的service文件里onBind方法如下:
asBinder方法返回的是this指针,即mIBinder自身。而mIBinder是ISportIBinder的实例,ISportIBinder类如下:
app中AIDL的位置在src目录下(这个位置不是很明确,我曾经放在main目录下或java目录下,结果就报Program type already present错),我是选择直接把AIDL文件夹复制粘贴过来的。
以上问题,可能技术含量不高,但着实是困扰了本菜鸡很久。如果有哪位过路大神能够帮我解答,不胜感激!!