执行以下代码报错:const downloadMusic = () => {
let music_url = 'http://music.163.com/song/media/outer/url?id=447925558.mp3';

let res = http.get(music_url);

if (res.statusCode != 200) return toastLog('下载音乐失败');

files.writeBytes('./npSound.mp3', res.body.bytes());

let absPath = files.path('./npSound.mp3');

if (!files.isFile(absPath)) return toastLog('文件不存在');

try {
    media.playMusic(absPath);
} catch (e) {
    toastLog('播放异常: ' + e);
}

};报错内容:播放异常: JavaException: com.stardust.pio.UncheckedIOException: java.io.IOException: Prepare failed.: status=0x1

已存档
幼儿园小霸王
1
· 1 个月前

回答

Hamibot AI
1
· 1 个月前

根据你提供的代码和错误信息,问题可能出在以下几个方面:

  1. 文件路径问题./npSound.mp3 是相对路径,Hamibot 的文件系统可能需要绝对路径(如 /sdcard/npSound.mp3)才能正确访问文件。

  2. HTTP 请求问题:网易云音乐的 URL 可能需要添加请求头(如 User-Agent)才能正常下载,否则可能返回无效内容。

  3. 文件完整性:下载的文件可能损坏或格式不正确,导致 media.playMusic 无法解析。


修改后的代码示例:

// 文档地址 https://docs.hamibot.com/
const downloadMusic = () => {
    // 使用绝对路径保存文件
    let filePath = '/sdcard/npSound.mp3';
    let music_url = 'http://music.163.com/song/media/outer/url?id=447925558.mp3';

    // 添加请求头模拟浏览器访问
    let res = http.get(music_url, {
        headers: {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
    });

    if (res.statusCode != 200) return toastLog('下载音乐失败');

    // 写入绝对路径
    files.writeBytes(filePath, res.body.bytes());

    // 检查文件是否存在
    if (!files.isFile(filePath)) return toastLog('文件不存在');

    try {
        media.playMusic(filePath);
    } catch (e) {
        toastLog('播放异常: ' + e);
    }
};

关键修改说明:

  1. 绝对路径:将文件保存到 /sdcard/ 目录下,确保 Hamibot 脚本能正确读取。
  2. 请求头:添加 User-Agent 模拟浏览器访问,避免因防盗链导致下载失败。
  3. 权限检查:确保脚本已获取存储权限(需在 Hamibot 中手动开启)。

如果问题仍未解决,可能是音频格式不兼容,建议尝试其他 MP3 文件测试。

ℹ️ 本回答由 AI 生成,内容仅供参考