开机音乐

This commit is contained in:
2025-08-13 18:05:28 +08:00
parent 7ca80bb1ab
commit ad7409fd6e
6 changed files with 207 additions and 36 deletions

View File

@@ -68,6 +68,10 @@ public class Main extends Service {
private static DeviceInfo deviceInfo = new DeviceInfo("未知序列号", "0%", 0, "未知游戏");
// 控制端地址
private InetAddress linkAddress;
private int linkPort;
// ================= 会话状态类 =================
private static class SessionState {
int expectedSequence = 0; // 该会话的下一个期望序列号
@@ -340,8 +344,8 @@ public class Main extends Service {
}
// 旧格式消息处理(兼容)
Log.i(TAG, "收到旧格式消息: " + message);
handleLegacyMessage(message, senderAddress, senderPort);
Log.i(TAG, "收到连接消息: " + message);
handleLinkMessage(message, senderAddress, senderPort);
}
private void handleAck(int ackSeq, String content) {
@@ -433,49 +437,39 @@ public class Main extends Service {
private void processValidMessage(String message, InetAddress senderAddress) {
// 实际业务处理
Log.i(TAG, "开始处理有效消息 -> " + message);
try {
// 检查消息是否为JSON格式
if (message.trim().startsWith("{") && message.trim().endsWith("}")) {
// 解析JSON消息
org.json.JSONObject jsonMsg = new org.json.JSONObject(message);
String intent = jsonMsg.optString("intent");
String data = jsonMsg.optString("data");
Log.i(TAG, "intent-" + intent + " data-" + data);
if ("Play".equals(intent)) {
String packageName = jsonMsg.optString("PackageName");
if ("play".equals(intent)) {
org.json.JSONObject playMsg = new org.json.JSONObject(data);
String packageName = playMsg.optString("packageName");
Log.i(TAG, "执行播放指令,包名: " + packageName);
callUnity("AppManager", "LaunchApp", packageName);
} else if ("GetPackageInfos".equals(intent)) {
} else if ("getPackageInfos".equals(intent)) {
Log.i(TAG, "执行获取所有包信息");
getInstalledPackages();
String escapedPackageNames = packageNames.replace("\"", "\\\""); // 转义引号
String jsonData = "{\"intent\":\"packageInfos\",\"data\":\"" + escapedPackageNames + "\"}";
sendReliable(senderAddress, 8888, jsonData);
send2ControllerReliable("packageInfos", escapedPackageNames);
} else if ("playing".equals(intent)) {
String name = jsonMsg.optString("name");
Log.i(TAG, "开始游玩" + name);
deviceInfo.status = 2;
deviceInfo.playing = name;
// 获取设备信息的JSON表示
String jsonResponse = getDeviceInfoAsJson();
send2ControllerReliable("playing", "");
send2ControllerReliable("updateDeviceInfo", jsonResponse);
}
// 可以根据需要添加更多intent类型
else {
Log.w(TAG, "未知的intent类型: " + intent);
}
} else {
// 处理原始的简单指令格式(向后兼容)
if ("PLAY".equals(message)) {
Log.i(TAG, "执行播放指令");
callUnity("AppManager", "UnityMethod", "play");
} else if ("STOP".equals(message)) {
Log.i(TAG, "执行停止指令");
callUnity("AppManager", "UnityMethod", "stop");
} else if ("GetPackageInfos".equals(message)) {
Log.i(TAG, "执行获取所有包信息");
getInstalledPackages();
String escapedPackageNames = packageNames.replace("\"", "\\\""); // 转义引号
String jsonData = "{\"intent\":\"packageInfos\",\"data\":\"" + escapedPackageNames + "\"}";
sendReliable(senderAddress, 8888, jsonData);
} else {
Log.w(TAG, "未知的简单指令: " + message);
}
}
} catch (org.json.JSONException e) {
Log.e(TAG, "解析JSON消息失败: " + e.getMessage());
@@ -559,21 +553,39 @@ public class Main extends Service {
});
}
// ================= 旧版兼容处理 =================
private void handleLegacyMessage(String message, InetAddress senderAddress, int senderPort) {
// 给控制端发送可靠信息
private void send2ControllerReliable(String intent, String data) {
String jsonData = "{\"intent\":\"" + intent + "\",\"data\":\"" + data + "\"}";
sendReliable(linkAddress, linkPort, jsonData);
}
// 给控制端发送不可靠消息
private void send2ControllerUnreliable(String intent, String data) {
String jsonData = "{\"intent\":\"" + intent + "\",\"data\":\"" + data + "\"}";
sendUnreliable(linkAddress, linkPort, jsonData);
}
private void handleLinkMessage(String message, InetAddress senderAddress, int senderPort) {
// 不处理来自本机相同端口的消息
if (isLocalMessage(senderAddress, senderPort)) {
return;
}
if ("DISCOVER".equals(message)) {
// 更新设备状态为在线
deviceInfo.status = 1;
// 保存控制端信息
linkAddress = senderAddress;
linkPort = senderPort;
if (deviceInfo.status == 0) {
// 更新设备状态为在线
deviceInfo.status = 1;
}
// 获取设备信息的JSON表示
String jsonResponse = getDeviceInfoAsJson();
sendUnreliable(senderAddress, senderPort, jsonResponse);
// sendUnreliable(senderAddress, senderPort, jsonResponse);
send2ControllerUnreliable("updateDeviceInfo", jsonResponse);
}
}
@@ -657,12 +669,7 @@ public class Main extends Service {
data.put("power", deviceInfo.power);
data.put("status", deviceInfo.status);
data.put("playing", deviceInfo.playing);
org.json.JSONObject json = new org.json.JSONObject();
json.put("intent", "updateDeviceInfo");
json.put("data", "\"" + data + "\"");
return json.toString();
return data.toString().replace("\"", "\\\"");
} catch (org.json.JSONException e) {
Log.e(TAG, "序列化设备信息失败: " + e.getMessage());
return "{}";

View File

@@ -209,6 +209,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 9b3159c935f3772479f4923d8edd8701, type: 3}
m_Name:
m_EditorClassIdentifier:
startUp: {fileID: 1518202725}
--- !u!1 &283105937
GameObject:
m_ObjectHideFlags: 0
@@ -522,6 +523,134 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1518202724
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1518202726}
- component: {fileID: 1518202725}
m_Layer: 0
m_Name: StartUp
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!82 &1518202725
AudioSource:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1518202724}
m_Enabled: 1
serializedVersion: 4
OutputAudioMixerGroup: {fileID: 0}
m_audioClip: {fileID: 8300000, guid: a7196a55982af884db82087fc47d446a, type: 3}
m_PlayOnAwake: 0
m_Volume: 1
m_Pitch: 1
Loop: 0
Mute: 0
Spatialize: 0
SpatializePostEffects: 0
Priority: 128
DopplerLevel: 1
MinDistance: 1
MaxDistance: 500
Pan2D: 0
rolloffMode: 0
BypassEffects: 0
BypassListenerEffects: 0
BypassReverbZones: 0
rolloffCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
panLevelCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
spreadCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
reverbZoneMixCustomCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
--- !u!4 &1518202726
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1518202724}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2128278267
GameObject:
m_ObjectHideFlags: 0
@@ -727,3 +856,4 @@ SceneRoots:
- {fileID: 301472688}
- {fileID: 2128278269}
- {fileID: 35413077}
- {fileID: 1518202726}

View File

@@ -24,6 +24,8 @@ public class AppManager : MonoBehaviour
{
public static AppManager Ins { get; private set; }
public AudioSource startUp;
void Start()
{
Ins = this;
@@ -37,6 +39,7 @@ public class AppManager : MonoBehaviour
CoroutineTaskManager.Instance.WaitSecondTodo(() =>
{
// QRScanPanel.Show();
startUp.Play();
LoginPanel.Show();
GetSnAndCallback();
GetPowerAndCallback();

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ea72f324f7339b44d9ae434fa9c15a52
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: a7196a55982af884db82087fc47d446a
AudioImporter:
externalObjects: {}
serializedVersion: 7
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant: