-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathautoxjs_music_status_handle.js
More file actions
144 lines (126 loc) · 4.56 KB
/
Copy pathautoxjs_music_status_handle.js
File metadata and controls
144 lines (126 loc) · 4.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* By @Vanilla Nahida
* 音乐通知监听脚本 - 将音乐播放状态写入文件
* 支持网易云音乐、QQ音乐、酷狗音乐、酷我音乐等主流音乐软件的通知栏音乐状态信息
* 需要授予 Auto JS 读取通知的权限和存储权限
* 前台默认输出的格式为:歌曲名 - 歌手名 - 专辑名
* 你可以根据需要修改输出格式
*/
// config start
// 常用音乐软件的包名白名单
const musicAppWhitelist = {
"网易云音乐": "com.netease.cloudmusic",
"QQ音乐": "com.tencent.qqmusic",
"酷狗音乐": "com.kugou.android",
"酷我音乐": "cn.kuwo.player",
"Spotify": "com.spotify.music",
"Apple Music": "com.apple.android.music",
"YouTube Music": "com.google.android.youtube",
"咪咕音乐": "cmccwm.mobilemusic",
"LX Music": "cn.toside.music.mobile"
// 可以根据需要添加更多音乐应用,格式为"应用名称": "包名"
// 其中应用名称会在前台中显示
};
// 音乐状态文件路径
const MUSIC_STATUS_FILE = "/sdcard/脚本/音乐播放状态信息.json";
// config end
// 检查目录是否存在
files.ensureDir(files.path(MUSIC_STATUS_FILE));
// 初始化音乐状态文件
function initMusicStatusFile() {
const initialStatus = {
appName: "",
musicTitle: "",
updateTime: 0,
isValid: false
};
files.write(MUSIC_STATUS_FILE, JSON.stringify(initialStatus));
}
// 写入音乐状态到文件
function writeMusicStatus(appName, musicTitle) {
const status = {
appName: appName,
musicTitle: musicTitle,
updateTime: new Date().getTime(),
isValid: true
};
try {
files.write(MUSIC_STATUS_FILE, JSON.stringify(status));
console.log("写入音乐状态: " + appName + " - " + musicTitle);
} catch (e) {
console.error("写入音乐状态文件失败: " + e);
}
}
// 启用通知监听,需要授予 Auto JS 读取通知的权限
events.observeNotification();
// 监听通知事件
events.onNotification(function (notification) {
// 检查是否为媒体通知
if (notification.category === "transport") {
// 获取通知的包名
const packageName = notification.getPackageName();
// 检查是否在白名单中
if (isInMusicWhitelist(packageName)) {
processMusicNotification(notification);
}
}
});
function isInMusicWhitelist(packageName) {
// 遍历白名单检查包名
for (let appName in musicAppWhitelist) {
if (musicAppWhitelist[appName] === packageName) {
return true;
}
}
return false;
}
function processMusicNotification(notification) {
// 获取应用名称
const appName = getAppNameFromPackage(notification.getPackageName());
// console.log("音乐应用: " + appName);
// console.log("通知标题: " + notification.getTitle());
// console.log("通知内容: " + notification.getText());
// 获取音乐标题(优先使用标题,否则使用通知文本)
let title = notification.getTitle();
let text = notification.getText();
if (title && text) {
const musicTitle = `${title} - ${text}`;
} else {
const musicTitle = title || text || '';
}
if (musicTitle && appName) {
console.log("成功提取音乐信息: " + appName + " - " + musicTitle);
// 写入到文件
writeMusicStatus(appName, musicTitle);
} else {
console.log("无法提取有效的音乐信息");
}
console.log("========================\n");
}
function getAppNameFromPackage(packageName) {
// 从白名单中查找对应的应用名称
for (let appName in musicAppWhitelist) {
if (musicAppWhitelist[appName] === packageName) {
return appName;
}
}
return packageName; // 如果未找到,返回包名本身
}
events.on("exit", function () {
console.log("脚本退出,清理音乐状态文件");
toast("脚本已停止, 清理音乐状态文件");
// 清理音乐状态文件
initMusicStatusFile();
console.log("音乐状态文件已清理");
toast("音乐状态文件已清理");
});
// 初始化
// console.log("初始化音乐状态文件");
initMusicStatusFile();
toast("音乐通知监听已启动");
console.log("开始监听音乐播放通知...");
// console.log("音乐软件白名单已加载: " + Object.keys(musicAppWhitelist).join(", "));
// console.log("音乐状态文件: " + MUSIC_STATUS_FILE);
// 保持脚本运行
setInterval(() => { }, 1000);