菜鸟关于AS的一些疑问——导包问题、onBind方法执行次数问题、AIDL使用问题

小学期的作业是使用AS制作一个APP,小组设想的是制作一个仿潮汐的音乐播放APP。在此先感谢github上《仿潮汐APP(番茄钟)》
https://github.com/Lavanidad/Tide和简书《上Android计步模块优化(今日步数)》https://www.jianshu.com/p/cfc2a200e46d的两位作者,为我们提供了宝贵的参考。
在此我先简单介绍我们的APP,主要分为三个module(学习、运动、和睡眠)。通过主页面进入后,可以通过![在这里插入图片描述](https://img-blog.csdnimg.cn/20190817202440580.JPG对应按钮开始专注。在此过程中,我们遇到了一些难以解决的问题(可能因为是小白,实在是难以解决 /囧),列举如下:
(1)安卓新版本导包问题。因为使用的是安卓4.0以后的版本,问题多到无法想象,但在一通瞎调后勉强解决了,但v4和v7的包还是导入不成功。本人已经仔细核对过网上的解决方案,build.gradle也添加了相应依赖,但在某个xml文件里还是报Missing classes错误。这个问题在低版本的AS里就不存在,暴风哭泣。
build.gradle(Module:app)

为了解决这个问题,我点开了cardview的包,看到了如下错误:
在这里插入图片描述
可以看到红色的import报错。但即便如此,还是弄不明白如何解决。

(2)音乐播放问题。之前我提到过,我们的APP分了三个module,它们共用一个MusicService,但使用的细节有所不同。于是为了区分不同模块,我在不同activity里建立了一个bindServiceConnection方法用于绑定服务,利用intent的Extra功能发送了当前activity的信息,同时onbind方法内记录下来,再通过switch进到不同的代码段。在这里插入图片描述
在这里插入图片描述
本以为万无一失,结果运行的时候出现了大问题。例如从睡眠模块转学习模块时,音乐播放并没有发生改变。debug了一下发现,这是因为From_Activity并没有更新,也就是在新的activity重新与service建立联系时,并没有再调用一次onBind方法。
上网认真搜索了以下,看到了这篇博文https://blog.csdn.net/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文件夹复制粘贴过来的。

以上问题,可能技术含量不高,但着实是困扰了本菜鸡很久。如果有哪位过路大神能够帮我解答,不胜感激!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值