Dana
6 天以前 3c2194940ca57b45b66a6344ad67e9c9f0b861bd
app/src/main/java/com/safeluck/floatwindow/FloatingService.java
@@ -86,9 +86,7 @@
        NONE,
        USB_PUSH,
        USB_RECORD,
        ANDROID_RECORD,
        P2_USB_PUSH,
        P2_USB_RECORD
        ANDROID_RECORD
    }
    
    // AIDL Binder
@@ -107,9 +105,9 @@
        }
        
        @Override
        public void stopMedia() throws RemoteException {
        public void stopMedia(MediaArgu media) throws RemoteException {
            Timber.d("stopMedia called via AIDL");
            FloatingService.this.stopMedia();
            FloatingService.this.stopMedia(media);
        }
        
        @Override
@@ -190,14 +188,12 @@
            return;
        }
        // usbCameraId == 2:走 P2 跨进程服务,支持两路 USB 同时工作
        // usbCameraId == 2:走 P2 跨进程服务,支持两路 USB 同时工作(本 Service 不再跟踪其状态)
        if (media.isUsedOutCamera() && media.getUsbCameraId() == 2) {
            stopCurrentManager();
            ensureP2Bound();
            if (p2Service != null) {
                try {
                    p2Service.startMedia(media);
                    currentManagerType = media.isPush() ? ManagerType.P2_USB_PUSH : ManagerType.P2_USB_RECORD;
                } catch (RemoteException e) {
                    Timber.e(e, "startMedia forward to P2 failed");
                    notifyCallback(1, -3, "启动P2服务失败: " + e.getMessage());
@@ -205,7 +201,6 @@
            } else {
                // 等待连接完成后执行
                pendingP2StartMedia = media;
                currentManagerType = media.isPush() ? ManagerType.P2_USB_PUSH : ManagerType.P2_USB_RECORD;
            }
            return;
        }
@@ -242,7 +237,7 @@
    }
    
    /**
     * 停止当前管理器
     * 停止当前本地管理器(仅管理本进程中的 USB(P1)/Android 录像或推流)
     */
    private void stopCurrentManager() {
        switch (currentManagerType) {
@@ -261,18 +256,6 @@
                    androidCameraRecordManager.stopRecord();
                }
                break;
            case P2_USB_PUSH:
            case P2_USB_RECORD:
                if (p2Service != null) {
                    try {
                        p2Service.stopMedia();
                    } catch (RemoteException e) {
                        Timber.e(e, "stopMedia forward to P2 failed");
                    }
                } else {
                    pendingP2StartMedia = null;
                }
                break;
            case NONE:
                break;
        }
@@ -280,11 +263,26 @@
    }
    
    /**
     * 停止媒体
     * 停止媒体(通过 AIDL 调用,带 MediaArgu,用于区分 P1/P2)
     */
    private void stopMedia() {
        Timber.d("stopMedia called");
        stopCurrentManager();
    private void stopMedia(MediaArgu media) {
        Timber.d("stopMedia called, media=%s", media);
        if (media != null && media.isUsedOutCamera() && media.getUsbCameraId() == 2) {
            // P2 USB 摄像头由 P2UsbCameraVideoService 管理
            ensureP2Bound();
            if (p2Service != null) {
                try {
                    p2Service.stopMedia(media);
                } catch (RemoteException e) {
                    Timber.e(e, "stopMedia forward to P2 failed");
                }
            } else {
                pendingP2StartMedia = null;
            }
        } else {
            // 其他情况(包括 P1 USB 与 Android 相机)由本 Service 自己管理
            stopCurrentManager();
        }
    }
    
    @Override
@@ -296,7 +294,7 @@
    @Override
    public void onDestroy() {
        super.onDestroy();
        stopMedia();
        stopCurrentManager();
        mCallbacks.kill();
        if (p2Bound) {
            try {