我正在使用会议 SDK (v5.17.1.18530) 创建自定义 UI 应用程序。
该应用程序是针对 SDK 34 (Android 14) 构建的,因此 Google 需要有关该应用程序如何使用前台服务的具体信息。
Google 拒绝了最新的应用程序更新,因为我需要提供有关前台服务的更多信息。
违规:前台服务权限:功能不存在 由用户发起或可被用户感知
详细信息:我们发现一个或多个声明的用例不属于 符合前台服务权限 2 的允许方式 用过的。具体来说,用户不知道功能 活动时需要许可。
执行 Media 时,用户无法察觉 FGS 的使用 播放 - 媒体播放、媒体投影 - 媒体和内容 投影和流媒体功能。
Google 要求我提供一段视频,展示我的应用程序如何在前台服务中使用以下功能。
android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK
我尝试从我的应用程序清单中删除 FOREGROUND_SERVICE_MEDIA_PROJECTION 和 FOREGROUND_SERVICE_MEDIA_PLAYBACK,但在这种情况下,由于 SecurityException 以 mediaPlayback 类型启动 FGS,我的应用程序在 Android 14 上崩溃。它发生在 Zoom 会议开始时。
致命异常:java.lang.RuntimeException 无法创建服务 com.zipow.videobox.share.ScreenShareServiceForSDK:java.lang.SecurityException:使用类型 mediaPlayback callerApp=ProcessRecord{d0c5093 11843:my.app/u0a416} targetSDK=34 启动 FGS 需要权限:所有权限 allOf= true [android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK]
使用以下调用堆栈:
致命异常:java.lang.RuntimeException:无法创建服务com.zipow.videobox.share.ScreenShareServiceForSDK:java.lang.SecurityException:使用类型mediaPlayback callerApp = ProcessRecord {d0c5093 11843:my.app/u0a416} targetSDK =启动FGS 34.需要权限:所有权限allOf=true [android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK] 在 android.app.ActivityThread.handleCreateService(ActivityThread.java:5111) 在 android.app.ActivityThread.-$$Nest$mhandleCreateService() 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2506) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loopOnce(Looper.java:230) 在 android.os.Looper.loop(Looper.java:319) 在 android.app.ActivityThread.main(ActivityThread.java:8893) 在 java.lang.reflect.Method.invoke(Method.java) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Zoom 支持表示 SDK 将它们用于屏幕共享功能:
FOREGROUND_SERVICE_MEDIA_PLAYBACK:允许在屏幕共享时共享音频的功能
FOREGROUND_SERVICE_MEDIA_PROJECTION:允许在屏幕共享时投影屏幕的功能
不幸的是,我没有找到任何方法来配置 Zoom sdk 以在没有 SERVICE_MEDIA_PROJECTION 和 MEDIA_PLAYBACK 类型的情况下启动 Zoom 会议前台服务。
Google 要求我提供我的应用程序在屏幕共享时使用共享音频功能的视频以及我的应用程序在屏幕共享时使用投影屏幕功能的视频。发布面向 SDK 34 的应用程序需要这些视频。
问题是我的应用程序没有实现(使用)Zoom Meeting SDK 的屏幕共享功能,因此我无法提供视频来展示我的应用程序如何在前台服务中使用它。
如何阻止 Zoom Meeting SDK(或任何其他第 3 方库)启动使用 FOREGROUND_SERVICE_MEDIA_PLAYBACK 或 FOREGROUND_SERVICE_MEDIA_PROJECTION 的前台服务?
如何使用第三方库处理这种情况?
有什么建议吗?有什么解决办法吗?
从 Zoom SDK 6.0.2 开始,可以在应用程序清单中指定 foregroundServiceType,并且 SDK 将遵循此设置。 它不适用于较旧的 SDK。
<service
android:name="com.zipow.videobox.share.ScreenShareServiceForSDK"
android:exported="false"
android:foregroundServiceType="microphone|connectedDevice"
tools:replace="android:foregroundServiceType"
android:label="Zoom"/>
默认情况下 Zoom SDK 使用以下前台服务功能:
前景_服务_媒体_投影
前景_服务_媒体_播放
前景_服务_麦克风
FOREGROUND_SERVICE_PHONE_CALL
FOREGROUND_SERVICE_CONNECTED_DEVICE
但是由于我的应用程序没有使用所有功能,我可以从应用程序清单中删除其中一些功能。
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" tools:node="remove" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" tools:node="remove" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" tools:node="remove" />
只保留实际使用的功能:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
这使我能够在应用程序发布审核期间提供所有必要的视频和信息。