Почему возникает ошибка при добавлении манифеста CAPTURE_VIDEO_OUTPUT или CAPTURE_SECURE_VIDEO_OUTPUT?
Столкнулся с такой проблемой. С реализацией этого куска кода, исключение:
DisplayMetrics displayMetrics = getResources (). GetDisplayMetrics(); int mDensity = displayMetrics.densityDpi;
DisplayManager dM = (DisplayManager) getSystemService(ContextWrapper.DISPLAY_SERVICE);
ImageReader imR = ImageReader.newInstance(300, 300, PixelFormat.RGBA_8888, 2);
VirtualDisplay vD = dM.createVirtualDisplay("VladScreen", 300, 300, mDensity, imR.getSurface(), DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC);
Исключением является следующее:
java.lang.SecurityException: Requires CAPTURE_VIDEO_OUTPUT or CAPTURE_SECURE_VIDEO_OUTPUT permission, or an appropriate MediaProjection token in order to create a screen sharing virtual display.
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.os.Parcel.readException(Parcel.java:1599)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.os.Parcel.readException(Parcel.java:1552)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.hardware.display.IDisplayManager$Stub$Proxy.createVirtualDisplay(IDisplayManager.java:484)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.hardware.display.DisplayManagerGlobal.createVirtualDisplay(DisplayManagerGlobal.java:377)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.hardware.display.DisplayManager.createVirtualDisplay(DisplayManager.java:537)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.hardware.display.DisplayManager.createVirtualDisplay(DisplayManager.java:529)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.hardware.display.DisplayManager.createVirtualDisplay(DisplayManager.java:480)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at com.example.novoseltsev.applicationpopupwindow.MainActivity.onCreate(MainActivity.java:106)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.app.Activity.performCreate(Activity.java:6237)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.app.ActivityThread.-wrap11(ActivityThread.java)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.os.Looper.loop(Looper.java:148)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at java.lang.reflect.Method.invoke(Native Method)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
09-27 04:03:30.321 7739-7739/com.example.novoseltsev.applicationpopupwindow W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
09-27 04:03:30.363 7739-11879/com.example.novoseltsev.applicationpopupwindow D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
Я понимаю, что это не добавляется к разрешению CAPTURE_VIDEO_OUTPUT
или же CAPTURE_SECURE_VIDEO_OUTPUT
,
Но после добавления manifest.xml исключение остается
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"/>
2 ответа
Какую версию Android вы используете? Если это Android 6.0 Marshmallow, вам нужно запросить разрешение. Предпочтение здесь
Это для системных служб, а не для сторонних приложений.
https://developer.android.com/reference/android/hardware/display/DisplayManager.html
Создание общедоступного виртуального дисплея, который не ограничивается только собственным контентом, неявно создает отображение с автоматическим зеркалированием. См. VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, чтобы узнать о том, кому разрешено создавать отображение с автоматическим зеркалированием.
https://developer.android.com/reference/android/hardware/display/DisplayManager.html...... Для создания виртуального виртуального отображения с автоматическим зеркалированием требуется разрешение CAPTURE_VIDEO_OUTPUT или CAPTURE_SECURE_VUTO. Эти разрешения зарезервированы для использования системными компонентами и недоступны сторонним приложениям. Альтернативно, соответствующий MediaProjection может использоваться для создания виртуального отображения с автоматическим зеркалированием.