Email 下载音频附件完成后播放不显示名称

本文详细解析了在电子邮件中打开并播放音频附件时遇到的问题,即播放器无法显示歌曲名称的原因及解决方案。通过在AttachmentProvider中增加查询列Columns.DISPLAY_NAME,可以确保音乐播放器正确获取歌曲名称并显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#0001281

【操作步骤】

电子邮件-收件箱-进入邮件查看详情界面-附件-音频附件-下载成功后直接点击播放-弹出播放器开始播放
【预期结果】
播放时应能够显示歌曲名称
【实际结果】

播放时不显示名称信息


原因:当打开邮件时,附件已经下载完成,存在database下的文件夹里,附件相关信息存在了Attachment表里,当点击播放时把缓存文件的Uri传给了音乐播放器,音乐播放器没根据Uri查找获取到_display_name,就显示Uri的最后一段作为名字。

解决方法:在AttachmentProvider里的query方法里给projection增加一个查询项Columns.DISPLAY_NAME。

解决方法原理:

1.Provider原理:

查询附件通过AttachmentProvider,其authorities="com.android.email.attachmentprovider"。当查询这个Provider时如果查询列为null,则查询列定为查询Columns._ID、Columns.DATA、Columns.MIMETYPE,我加了一项Columns.DISPLAY_NAME,接着拆分Uri,得到id,并查询EmailProvider得到mimetype。

接着查询AUTHORITY = "com.android.email.provider"的EmailProvider,查询字段为定义好了的AttachmentColumns.FILENAME、AttachmentColumns.SIZE、AttachmentColumns.CONTENT_URI,uri为EmailContent.CONTENT_URI + "/attachment/"+id。

获取返回结果name、size、contentUri,new一个MatrixCursor对象字段取自projection,给这个对象的列赋查询到的值,返回这个cursor。

2.调用流程:

当点击播放时,调用MessageViewFragmentBase类的onOpenAttachment方法。里面这个Intent的data是会变化的,如果保存了,Uri为"file:",否则为“content:”,变化还没明白。接着音乐播放器的AudioPreview会被调用,返回的cursor中_display_name为音乐名字。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值