Giter Club home page Giter Club logo

Comments (11)

qjzcj2008 avatar qjzcj2008 commented on August 15, 2024

尝试了一下,回退到1.5.9.1版本后可以正常打开黑名单添加页面。

初步问题定位到了Android 13权限变更后,黑名单手动搜索功能还并未适配SAF

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" />

1.6之后的版本细化了权限请求,在Android 13上不再请求储存权限。但黑名单的添加和手动搜索仍依赖于过往的FolderChooser类来实现,这就导致了1.6之后的版本在Android 13及以上版本添加黑名单和进行手动搜索时,即使授予全部权限仍会报错“应用需要必要的运行权限”。

FolderChooser(
this,
TAG_BLACKLIST,
null,
null,
null,
object : FolderChooser.FolderCallback {
override fun onFolderSelection(chooser: FolderChooser, folder: File) {
if (folder.isDirectory) {
val newBlacklist = LinkedHashSet<String>(blackList)
newBlacklist.add(folder.absolutePath)
SPUtil.putStringSet(
this@SettingActivity,
SETTING_KEY.NAME,
SETTING_KEY.BLACKLIST,
newBlacklist
)
contentResolver.notifyChange(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null
)
}
configBlackList()
}
}).show()
}
}
}

不过这个我不太会修(;′⌒`)尝试了一天面向GPT编程之后,感觉可能还是得等其他人来修了😥

顺带一提Q音的搜索接口好像也挂了,酷狗现在似乎也不再lrc格式中附带翻译了,这部分的讨论要新建个issue来讨论,还是用以前那个网易云接口的issue修改一下集中讨论呢?

from aplayer.

rRemix avatar rRemix commented on August 15, 2024

因为最近工作太忙,权限的问题等后面空一点再修复,当然更欢迎pr
接口的话不建议花太多时间了,估计后面都慢慢不能用了

from aplayer.

qjzcj2008 avatar qjzcj2008 commented on August 15, 2024

权限适配这边我之前试了下,不过还是对这块不太熟,试了下没修好,估计到时候还是得你们来。😥

接口的话不建议花太多时间了,估计后面都慢慢不能用了

这倒确实,不过歌词功能也是我一开始来使用的一大痛点😥所以还是借这个issue说一下大体的情况吧,看看后面怎么处理

  1. Q音的搜索接口感觉动得比较频繁,而且大多数都要求登录,可能这部分没什么比较好的办法了。
  2. 酷狗现在似乎仅在其专有的krc格式中附带翻译了,格式的转换倒是在其他地方看到过已经有逆向成果了,跑了一下也能跑通,不过他们的内容格式也不是标准的双语lrc格式,他们用了一个叫[language:]的行携带了一个base64过后的json,json的内容包含不包含时间戳的歌词注音和(或)翻译,其按照行数和剩余部分的lrc歌词对应。这部分的处理我也不太会写😥

from aplayer.

Radium-bit avatar Radium-bit commented on August 15, 2024

希望能够尽快修复黑名单和文件选择器的问题

from aplayer.

qjzcj2008 avatar qjzcj2008 commented on August 15, 2024

我尝试修复了一下黑名单的SAF适配,不过因为对Android开发确实不太熟悉,现在的问题是我不知道要如何从uri获取文件夹的绝对路径,但我已经不知道该怎么改了🤔你可以看看,如果需要的话,我可以提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/已经没啥差别了🤔)
  获取到的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大家讨论一下看看能不能修一修?

from aplayer.

Henry-ZHR avatar Henry-ZHR commented on August 15, 2024

我尝试修复了一下黑名单的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?

from aplayer.

qjzcj2008 avatar qjzcj2008 commented on August 15, 2024

看看歌曲文件的 Uri 能不能直接拿来匹配?

那要改的地方太多了🤔其他地方能跑还是最好不去动比较好🤔

用最粗暴的办法手搓了一个从uri拼接完整地址的办法🤔我这边试了一下倒是没问题,为了保险起见我只写了现在见到的两种形式的uri的转化,其他类型的uri遇到了直接抛null取消后面的流程🤔

我提pr了

from aplayer.

rRemix avatar rRemix commented on August 15, 2024

权限适配这边我之前试了下,不过还是对这块不太熟,试了下没修好,估计到时候还是得你们来。😥

接口的话不建议花太多时间了,估计后面都慢慢不能用了

这倒确实,不过歌词功能也是我一开始来使用的一大痛点😥所以还是借这个issue说一下大体的情况吧,看看后面怎么处理

  1. Q音的搜索接口感觉动得比较频繁,而且大多数都要求登录,可能这部分没什么比较好的办法了。
  2. 酷狗现在似乎仅在其专有的krc格式中附带翻译了,格式的转换倒是在其他地方看到过已经有逆向成果了,跑了一下也能跑通,不过他们的内容格式也不是标准的双语lrc格式,他们用了一个叫[language:]的行携带了一个base64过后的json,json的内容包含不包含时间戳的歌词注音和(或)翻译,其按照行数和剩余部分的lrc歌词对应。这部分的处理我也不太会写😥

如果能找到接口的话可以提供给我,我来做后续的适配 @qjzcj2008

from aplayer.

qjzcj2008 avatar qjzcj2008 commented on August 15, 2024

酷狗歌词的接口还好,只要改一个参数就好,主要是后续的处理,文件解密和翻译合成。

fun searchKuGouLyric(id: Int, accessKey: String?): Single<KLrcResponse> {
return kuGouApi.searchKuGouLyric(1, "pc", "lrc", "utf8", id, accessKey)
}

接口把这里参数的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🤣

from aplayer.

AQUOSZZY avatar AQUOSZZY commented on August 15, 2024

使用的是release版本APlayer_v1.6.1.0_nongoogle_2023-04-27.16-05.apk,系统版本Android13 MIUI 14.0.7,遇到了同样的问题,无法手动扫描。
并且无法自动扫描出SD卡中的音乐文件,导入设备可以正常读取,回退到多个旧版本尝试也没用(1.5.9.1手动扫描崩溃),希望能够尽快修复。

from aplayer.

YaeSakuraQvQ avatar YaeSakuraQvQ commented on August 15, 2024

非常好软件,爱来自瓷器 可惜bug还没修(
插个眼,大佬有空时修下吧

from aplayer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.