当前位置: 首页 > 知识库问答 >
问题:

android Q中未识别MediaProjection服务类型

谭健柏
2023-03-14

随着AndroidQ的新隐私变更生效,现在任何使用MediaProjectionapi的应用程序都必须在manifest下的服务标签中指定Android:foregroundsserviceType属性。

但最近,我注意到,尽管我设置了android:foregroundServiceType=“mediaprojection”,但还是引发了一个安全异常。有人知道我做错了什么吗?

显示:

<service
            android:name=".services.MediaProjectionService"
            android:enabled="true"
            android:exported="false"
            android:foregroundServiceType="mediaProjection" />

抛出的异常:

java.lang.RuntimeException: Unable to start service com.package.app.services.MediaProjectionService@6d0fed2 with Intent { act=com.package.app.services.action.startrecording cmp=com.package.app/.services.MediaProjectionService(has extras) }: java.lang.SecurityException: Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4103)
        at android.app.ActivityThread.access$1800(ActivityThread.java:219)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7343)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:933)
     Caused by: java.lang.SecurityException: Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
        at android.os.Parcel.createException(Parcel.java:2071)
        at android.os.Parcel.readException(Parcel.java:2039)
        at android.os.Parcel.readException(Parcel.java:1987)
        at android.media.projection.IMediaProjection$Stub$Proxy.start(IMediaProjection.java:231)
        at android.media.projection.MediaProjection.<init>(MediaProjection.java:58)
        at android.media.projection.MediaProjectionManager.getMediaProjection(MediaProjectionManager.java:104)
        at com.package.app.services.MediaProjectionService.startRecording(MediaProjectionService.java:190)
        at com.package.app.services.MediaProjectionService.onStartCommand(MediaProjectionService.java:142)
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4085)
        at android.app.ActivityThread.access$1800(ActivityThread.java:219) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7343) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:933) 
     Caused by: android.os.RemoteException: Remote stack trace:
        at com.android.server.media.projection.MediaProjectionManagerService$MediaProjection.start(MediaProjectionManagerService.java:476)
        at android.media.projection.IMediaProjection$Stub.onTransact(IMediaProjection.java:135)
        at android.os.Binder.execTransactInternal(Binder.java:1021)
        at android.os.Binder.execTransact(Binder.java:994)

附言:这是在Android QDP5GSI和TargetSDK 29上体验到的。该应用程序与目标sdk 28配合使用,无需任何更改。

共有2个答案

孟德曜
2023-03-14

更改以下属性

android:foregroundServiceType="mediaProjection"

tools:targetApi="q"

在Androidanifest.xml为我工作。

< service

android:name="SERVICE_NAME"

android:foregroundServiceType="mediaProjection"

tools:targetApi="q"

android:enabled="true"

android:exported="false" />
锺离宸
2023-03-14

别忘了添加权限

使现代化

确保在getMediaProjection()之前调用startForeground()

最好的解决方案是无条件地从onCreate()调用startForeground(),在通知中显示某种默认消息。然后,您可以执行逻辑并调用NotificationManager。notify(),随时更新通知。

 类似资料:
  • 我想知道为什么来自UserDetailsServiceImpl类的方法不会出现在控制器中...我只能访问接口中的方法,但不能访问其他实现的方法。我尝试使用限定符,甚至制作了一个config类来在按接口注入bean时实例化impl类。 谁能告诉我我做错了什么?

  • 4.6 服务的指纹识别 为了确保有一个成功的渗透测试,必须需要知道目标系统中服务的指纹信息。服务指纹信息包括服务端口、服务名和版本等。在Kali中,可以使用Nmap和Amap工具识别指纹信息。本节将介绍使用Nmap和Amap工具的使用。 4.6.1 使用Nmap工具识别服务指纹信息 使用Nmap工具查看192.168.41.136服务上正在运行的端口。执行命令如下所示: 从输出的信息中可以查看到目

  • 在运行一个spring-boot服务器时,我在intellij中得到这个错误消息: 当我尝试使用以下命令构建项目文件夹中的项目时,它无法识别maven:mvn spring-boot: run 我通过下载maven解决了这个问题:https://maven.apache.org/install.html并将apache-maven-3.5.3文件夹中的bin文件手动添加到librarys 好像有点

  • 在中,它显示的“非静态方法'getcontext()'不能从静态上下文引用”如何解决,或者我应该调用什么来代替它。

  • 我正在尝试创建一个在Android 4.2中运行连续语音识别的服务。使用此链接中的答案(Android 4.1上的Android语音识别服务 我到底做错了什么? 相关活动代码(从活动调用的静态方法,actiityContext是调用此方法的活动): 服务代码:

  • 综述 对于渗透测试人员来说,识别Web服务器是一项十分关键的任务。了解正在运行的服务器类型和版本能让测试者更好去测试已知漏洞和大概的利用方法。 今天市场上存在着许多不同开发商不同版本的Web服务器。明确被测试的服务器类型能够有效帮助测试过程和决定测试的流程。这些信息可以通过发送给web服务器测定命令,分析输出结果来推断出,因为不同版本的web服务器软件可能对这些命令有着不同的响应。通过了解不同服务