[@notifee/react-native]:foregroundServiceType 0x000000C0 不是清单服务元素中 foregroundServiceType 属性 0x00000800 的子集

问题描述 投票:0回答:1

在视频会议应用程序中,我最近在应用程序清单中添加了一个前台服务,因为应用程序在后台运行大约一分钟后,通话中的其他人将无法看到或听到视频和音频。

我声明使用@notifee/react-native

// for android foreground
if (Platform.OS === 'android') {
  notifee.registerForegroundService(notification => {
    return new Promise(() => {
      // handle background event
      notifee.onBackgroundEvent(async ({type, detail}) => {
        const {pressAction} = detail;

        if (type === EventType.ACTION_PRESS && pressAction?.id === 'mic') {
          const result = togggleForegroundMic();

          if (result) {
            notifee.displayNotification({
              id: notification.id,
              body: notification.body,
              android: {
                ...notification.android,
                asForegroundService: true,
                foregroundServiceTypes: [
                  AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_CAMERA,
                  AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_MICROPHONE,
                ],
                actions: [
                  {
                    title: result,
                    pressAction: {id: 'mic'},
                  },
                  // {
                  //   title: 'Loud Speaker',
                  //   pressAction: {id: 'speaker'},
                  // },
                ],
              },
            });
          }
        }
      });

      notifee.onForegroundEvent(({type, detail}) => {
        if (
          type === EventType.ACTION_PRESS &&
          detail?.pressAction?.id === 'mic'
        ) {
          const result = togggleForegroundMic();

          if (result) {
            notifee.displayNotification({
              id: notification.id,
              body: notification.body,
              android: {
                ...notification.android,
                asForegroundService: true,
                foregroundServiceTypes: [
                  AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_CAMERA,
                  AndroidForegroundServiceType.FOREGROUND_SERVICE_TYPE_MICROPHONE,
                ],
                actions: [
                  {
                    title: result,
                    pressAction: {id: 'mic'},
                  },
                  // {
                  //   title: 'Loud Speaker',
                  //   pressAction: {id: 'speaker'},
                  // },
                ],
              },
            });
          }
        }
        if (
          type === EventType.ACTION_PRESS &&
          detail?.pressAction?.id === 'speakder'
        ) {
        }
      });
    });
  });
}

在“foregroundServiceTypes”中,我在数组中声明了 microphonecamera 服务

但这会导致我的应用程序崩溃并出现以下错误

致命异常:主进程:com.collabnowmobilecleint,PID:30221 java.lang.RuntimeException:无法使用 Intent { act=app.notifee.core.ForegroundService.START cmp=com 启动服务 app.notifee.core.ForegroundService@cd7fb43 .collabnowmobilecleint/app.notifee.core.ForegroundService(有额外内容)}:java.lang.IllegalArgumentException:foregroundServiceType 0x000000C0不是android.app.ActivityThread.handleServiceArgs(ActivityThread.java的清单文件的服务元素中的foregroundServiceType属性0x00000800的子集:4289)在android.app.ActivityThread.access$2000(ActivityThread.java:236)在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2001)在android.os.Handler.dispatchMessage(Handler.java:107) )在 android.os.Looper.loop(Looper.java:264) 在 android.app.ActivityThread.main(ActivityThread.java:7684) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android。 internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980) 引起:java.lang.IllegalArgumentException:foregroundServiceType 0x000000C0不是子集清单文件的服务元素中的 foregroundServiceType 属性 0x00000800 在 android.os.Parcel.createException(Parcel.java:2075) 在 android.os.Parcel.readException(Parcel.java:2039) 在 android.os.Parcel.readException(Parcel) .java:1987) 在 android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:6720) 在 android.app.Service.startForeground(Service.java:742) 在 app.notifee.core.ForegroundService.onStartCommand( SourceFile:21) 在 android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4271) 在 android.app.ActivityThread.access$2000(ActivityThread.java:236) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java: 2001)在android.os.Handler.dispatchMessage(Handler.java:107)在android.os.Looper.loop(Looper.java:264)在android.app.ActivityThread.main(ActivityThread.java:7684)在java。 lang.reflect.Method.invoke(本机方法)位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980) )引起的原因:android.os.RemoteException:远程堆栈跟踪:在com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1396)在com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java: 1034) 在 com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:15727) 在 android.app.IActivityManager$Stub.onTransact(IActivityManager.java:3056) 在 com.android.server.am.ActivityManagerService.onTransact (ActivityManagerService.java:3153)

我尝试将以下权限添加到我的应用程序的清单文件中

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />

我还将以下内容添加为应用程序标记的属性

<application android:name=".MainApplication" android:foregroundServiceType="camera|microphone">

我希望当应用程序在后台/最小化时麦克风和摄像头仍保持活动状态

android react-native foreground-service
1个回答
0
投票

找到解决方案

似乎我没有按照文档中的描述指定前台服务类型:https://notifee.app/react-native/docs/android/foreground-service#specifying-foreground-service-types

添加下面的代码片段解决了我的问题

<service 
        android:name="app.notifee.core.ForegroundService" 
        android:foregroundServiceType="camera|microphone"
        tools:replace="android:foregroundServiceType" />
© www.soinside.com 2019 - 2024. All rights reserved.