mtsahakis / MediaProjectionDemo

One Activity sample app of using Android Lollipop MediaProjection API to capture device screenshots
Other
210 stars 76 forks source link

Caused by: java.lang.SecurityException: Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION #22

Closed Myjodia closed 3 years ago

Myjodia commented 3 years ago

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.(MediaProjection.java:58) at android.media.projection.MediaProjectionManager.getMediaProjection(MediaProjectionManager.java:104) at com.kloudq.apps.rrov5.activity.LoginActivity.onActivityResult(LoginActivity.java:1361) at android.app.Activity.dispatchActivityResult(Activity.java:8110) at android.app.ActivityThread.deliverResults(ActivityThread.java:4838) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)  at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loop(Looper.java:214)  at android.app.ActivityThread.main(ActivityThread.java:7356)  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:930)  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)

Alireza-Farahani commented 3 years ago

In case any one read this, Its because if you target API version 28 or later, Android forces you declare permission in manifest for using a "foreground service". Also in case of MediaProjection, you need to add android:foregroundServiceType="mediaProjection" to your service tag in Manifest file More info stackoverflow

mtsahakis commented 3 years ago

I have updated the project to support foreground services API.

Raj123456788 commented 3 years ago

Hi @mtsahakis : I am getting the same error for Apprtc demo and wanted to implement your service logic. Can someone please explain the logic startProjection(int resultCode, Intent data) will it be part of service from now on? Any info is appreciated.