Open qjzcj2008 opened 1 year ago
尝试了一下,回退到1.5.9.1版本后可以正常打开黑名单添加页面。
初步问题定位到了Android 13权限变更后,黑名单
和手动搜索
功能还并未适配SAF
1.6之后的版本细化了权限请求,在Android 13上不再请求储存权限。但黑名单
的添加和手动搜索
仍依赖于过往的FolderChooser
类来实现,这就导致了1.6之后的版本在Android 13及以上版本添加黑名单
和进行手动搜索
时,即使授予全部权限仍会报错“应用需要必要的运行权限”。
不过这个我不太会修(;′⌒`)尝试了一天面向GPT编程之后,感觉可能还是得等其他人来修了😥
顺带一提Q音的搜索接口好像也挂了,酷狗现在似乎也不再lrc格式中附带翻译了,这部分的讨论要新建个issue来讨论,还是用以前那个网易云接口的issue修改一下集中讨论呢?
因为最近工作太忙,权限的问题等后面空一点再修复,当然更欢迎pr 接口的话不建议花太多时间了,估计后面都慢慢不能用了
权限适配这边我之前试了下,不过还是对这块不太熟,试了下没修好,估计到时候还是得你们来。😥
接口的话不建议花太多时间了,估计后面都慢慢不能用了
这倒确实,不过歌词功能也是我一开始来使用的一大痛点😥所以还是借这个issue说一下大体的情况吧,看看后面怎么处理
[language:]
的行携带了一个base64过后的json,json的内容包含不包含时间戳的歌词注音和(或)翻译,其按照行数和剩余部分的lrc歌词对应。这部分的处理我也不太会写😥希望能够尽快修复黑名单和文件选择器的问题
我尝试修复了一下黑名单的SAF适配,不过因为对Android开发确实不太熟悉,现在的问题是我不知道要如何从uri获取文件夹的绝对路径,但我已经不知道该怎么改了🤔你可以看看,如果需要的话,我可以提pr,然后一起来修从uri取文件夹路径的问题。 @rRemix https://github.com/rRemix/APlayer/compare/master...qjzcj2008:APlayer:SAF-Fix
目前的问题在于我不知道该如何从uri取得文件夹的绝对地址。
这是我目前使用的从uri获取文件夹路径的方法
https://github.com/qjzcj2008/APlayer/blob/331678d4d143636208446698aea282c73d181652/app/src/main/java/remix/myplayer/ui/activity/SettingActivity.kt#L133-L148
但不知道为什么这个方法无法获取到上级文件夹,仅能够获得当前文件夹的名称,并不能获取到文件夹的完整相对路径,使得我的这个修复版本仅能在添加一级目录时有效,并且挂载点信息似乎无法取得。
获取到的uri的content提供者都是content://com.android.externalstorage.documents/
似乎无法区分文件是否来自外部储存(不过我这边的设备都不支持SD卡了,所以也没有进行测试),这部分我目前是用Environment.getExternalStorageDirectory()
去和文件夹的相对路径进行拼接的(其实感觉和写死/storage/emulated/0/
已经没啥差别了🤔)
获取到的uri中倒是包含文件夹的完整相对路径,但似乎对一些文件夹其uri也是特殊的,如果要从uri取的话感觉要做好几种状况的应对。
content://com.android.externalstorage.documents/tree/primary:Lv1/Lv2/document/primary:Lv1/Lv2/
content://com.android.externalstorage.documents/tree/home:Lv1/document/home:Lv1
分别对应/Lv1/Lv2
和/Document/Lv1
这两个路径,似乎对于document文件夹及其子文件夹的uri是特殊的(目前仅发现这个特例)
不知道这部分有没有什么更好的处理方法。
说起来,顺便翻了一下,似乎对接口返回歌词的处理是放在src/main/java/remix/myplayer/lyric/LyricSearcher.kt
里的?之前研究了一下,Q音的接口要修可能比较难了,大部分接口都要求登录才可以使用,但酷狗那边的翻译感觉还有修一修的希望,要不看看后面有空我开个issue大家讨论一下看看能不能修一修?
我尝试修复了一下黑名单的SAF适配,不过因为对Android开发确实不太熟悉,现在的问题是我不知道要如何从uri获取文件夹的绝对路径,但我已经不知道该怎么改了thinking你可以看看,如果需要的话,我可以提pr,然后一起来修从uri取文件夹路径的问题。 @rRemix master...qjzcj2008:APlayer:SAF-Fix
目前的问题在于我不知道该如何从uri取得文件夹的绝对地址。 这是我目前使用的从uri获取文件夹路径的方法 https://github.com/qjzcj2008/APlayer/blob/331678d4d143636208446698aea282c73d181652/app/src/main/java/remix/myplayer/ui/activity/SettingActivity.kt#L133-L148 但不知道为什么这个方法无法获取到上级文件夹,仅能够获得当前文件夹的名称,并不能获取到文件夹的完整相对路径,使得我的这个修复版本仅能在添加一级目录时有效,并且挂载点信息似乎无法取得。 获取到的uri的content提供者都是
content://com.android.externalstorage.documents/
似乎无法区分文件是否来自外部储存(不过我这边的设备都不支持SD卡了,所以也没有进行测试),这部分我目前是用Environment.getExternalStorageDirectory()
去和文件夹的相对路径进行拼接的(其实感觉和写死/storage/emulated/0/
已经没啥差别了thinking) 获取到的uri中倒是包含文件夹的完整相对路径,但似乎对一些文件夹其uri也是特殊的,如果要从uri取的话感觉要做好几种状况的应对。content://com.android.externalstorage.documents/tree/primary:Lv1/Lv2/document/primary:Lv1/Lv2/
content://com.android.externalstorage.documents/tree/home:Lv1/document/home:Lv1
分别对应/Lv1/Lv2
和/Document/Lv1
这两个路径,似乎对于document文件夹及其子文件夹的uri是特殊的(目前仅发现这个特例) 不知道这部分有没有什么更好的处理方法。说起来,顺便翻了一下,似乎对接口返回歌词的处理是放在
src/main/java/remix/myplayer/lyric/LyricSearcher.kt
里的?之前研究了一下,Q音的接口要修可能比较难了,大部分接口都要求登录才可以使用,但酷狗那边的翻译感觉还有修一修的希望,要不看看后面有空我开个issue大家讨论一下看看能不能修一修?
Google 的设计好像就是不想让人拿绝对路径……
看看歌曲文件的 Uri 能不能直接拿来匹配?
或者也可以直接用 https://developer.android.com/reference/android/provider/MediaStore.MediaColumns#RELATIVE_PATH,手动输入路径或者用获取到的所有路径糊一个和原来一样的 UI?
看看歌曲文件的 Uri 能不能直接拿来匹配?
那要改的地方太多了🤔其他地方能跑还是最好不去动比较好🤔
用最粗暴的办法手搓了一个从uri拼接完整地址的办法🤔我这边试了一下倒是没问题,为了保险起见我只写了现在见到的两种形式的uri的转化,其他类型的uri遇到了直接抛null取消后面的流程🤔
我提pr了
权限适配这边我之前试了下,不过还是对这块不太熟,试了下没修好,估计到时候还是得你们来。😥
接口的话不建议花太多时间了,估计后面都慢慢不能用了
这倒确实,不过歌词功能也是我一开始来使用的一大痛点😥所以还是借这个issue说一下大体的情况吧,看看后面怎么处理
- Q音的搜索接口感觉动得比较频繁,而且大多数都要求登录,可能这部分没什么比较好的办法了。
- 酷狗现在似乎仅在其专有的krc格式中附带翻译了,格式的转换倒是在其他地方看到过已经有逆向成果了,跑了一下也能跑通,不过他们的内容格式也不是标准的双语lrc格式,他们用了一个叫
[language:]
的行携带了一个base64过后的json,json的内容包含不包含时间戳的歌词注音和(或)翻译,其按照行数和剩余部分的lrc歌词对应。这部分的处理我也不太会写😥
如果能找到接口的话可以提供给我,我来做后续的适配 @qjzcj2008
酷狗歌词的接口还好,只要改一个参数就好,主要是后续的处理,文件解密和翻译合成。
https://github.com/rRemix/APlayer/blob/0d7f0e918134185b16c2e16f089015d4e62d4e97/app/src/main/java/remix/myplayer/request/network/HttpClient.kt#L133-L135
接口把这里参数的lrc
改成krc
就好
krc文件的解密算法在这里有别人的逆向结果和可用样例代码。
返回的数据结构和原来的一致,只是content
的值变为了base64后的krc文件,krc解密后的文件样例如下
[id:$00000000]
[ar:*]
[ti:*]
[by:]
[language:一个base64后的json]
[00:00.000]***
[00:07.200]***
[00:14.400]***
对language行的base64解码后得到的文件样例如下
{
"content": [
{
"language": 0,
"lyricContent": [
["***"],
["***"],
["***"]
],
"type": 1
},
{
"language": 0,
"lyricContent": [注音(可能会根据语言不同?)],
"type": 0
}
],
"version": 1
}
language
似乎并没有意义,语言区分依靠type
,目前观察下来type
为1时为中文翻译,lyricContent
中的翻译(不带时间戳)与krc解密后[language:]
行以下的行一一对应。
之前测的时候发现好像带个什么参数会更容易命中带翻译的krc,不过当时没记下来,现在测试的时候好像也没遇到不带翻译的krc了😂不过感觉kg现在这搜索接口有点怪怪的,有些就搜不出来,去网页版试了一下同样的关键词是有结果的,不知道什么情况,再观察看看吧。
q音那边似乎是老接口基本上全下线了,看了一下现在的接口基本上要么得登录,要么要sign,再说吧。@rRemix 实在不行要不先加个选项弹个输入框让用户自己填mid先凑合凑合🤣以后可以考虑变成让用户填网页地址,自动从里面提mid🤣
使用的是release版本APlayer_v1.6.1.0_nongoogle_2023-04-27.16-05.apk,系统版本Android13 MIUI 14.0.7,遇到了同样的问题,无法手动扫描。 并且无法自动扫描出SD卡中的音乐文件,导入设备可以正常读取,回退到多个旧版本尝试也没用(1.5.9.1手动扫描崩溃),希望能够尽快修复。
非常好软件,爱来自瓷器 可惜bug还没修(
插个眼,大佬有空时修下吧
APlayer版本:v1.6.1.0(16102) (google) Android系统版本:Android 13 三星国行 One UI 5.1 在过往版本中可以成功添加黑名单目录,现版本想要添加
黑名单
时发现点击“添加”按钮后提示错误,错误提示为“应用需要必要的运行权限”,系统设置中已允许全部申请的权限,播放功能是正常的。 试了一下,手动扫描
点击后也会有相同的报错,但在使用歌单导入/导出
功能时可以正常调起SAF。