2016-09-27 16 views
0

このような問題に直面しています。このコードの実装では、例外:マニフェスト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 

私はそれがpermisson CAPTURE_VIDEO_OUTPUTまたはCAPTURE_SECURE_VIDEO_OUTPUTに追加されていないことを理解しています。

しかしmanifest.xmlに例外を追加した後は、あなたがAndroidのバージョンを使用しない

<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"/> 

答えて

0

のまま? Android 6.0 Marshmallowの場合は、許可をリクエストする必要があります。 Preference here

+0

私はAndroid 5.0を使用しています。 –

2

これはシステムサービスであり、第三者のアプリケーションではありません。所有するコンテンツをするだけで、暗黙的に限定されるものではなく、公共の仮想ディスプレイを作成

https://developer.android.com/reference/android/hardware/display/DisplayManager.html#VIRTUAL_DISPLAY_FLAG_PUBLIC

は自動ミラーリング表示を作成します。自動ミラーリング表示を作成できるユーザーの制限については、VIRTUAL_DISPLAY_FLAG_AUTO_MIRRORを参照してください。自動mirroing仮想ディスプレイを作成

https://developer.android.com/reference/android/hardware/display/DisplayManager.html#VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR ...... はCAPTURE_VIDEO_OUTPUTまたはCAPTURE_SECURE_VIDEO_OUTPUT権限が必要です。これらのアクセス許可は、システムコンポーネントで使用するために予約されており、サードパーティアプリケーションでは使用できません。あるいは、適切なMediaProjectionを使用して、自動ミラーリング仮想ディスプレイを作成することもできます。

関連する問題