java.lang.IllegalAccessException:尝试从非可视上下文访问可视服务WindowManager
我一直在努力以不会产生以下错误的方式在我的应用程序中实现摄像头功能: E/ContextImpl:试图从虚拟机访问visual service WindowManager 非可视上下文:com.camtest。App@385f002视觉服务, 例如WindowManager、WallperService或LayoutInflater应 从活动或其他可视上下文访问。使用一种活动或一种方法 使用Context#createWindowContext(int,Bundle)创建的上下文,其中 调整为上某个区域的配置和视觉边界 屏幕。 java.lang.IllegalAccessException:尝试访问可视服务 来自非可视上下文的WindowManager:com.camtest。App@385f002 该错误由以下行触发:java.lang.IllegalAccessException:尝试从非可视上下文访问可视服务WindowManager,java,android,android-camerax,illegalaccessexception,Java,Android,Android Camerax,Illegalaccessexception,我一直在努力以不会产生以下错误的方式在我的应用程序中实现摄像头功能: E/ContextImpl:试图从虚拟机访问visual service WindowManager 非可视上下文:com.camtest。App@385f002视觉服务, 例如WindowManager、WallperService或LayoutInflater应 从活动或其他可视上下文访问。使用一种活动或一种方法 使用Context#createWindowContext(int,Bundle)创建的上下文,其中 调整为上
final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
此活动由以下代码在onCreate of MainActivity中启动:
Button button_test = findViewById(R.id.button_test);
button_test.setOnClickListener(view -> {
Intent intent = new Intent(MainActivity.this, CamTest.class);
startActivityForResult(intent,0);
});
编辑:完整堆栈跟踪-
E/ContextImpl: Tried to access visual service WindowManager from a non-visual Context:com.camtest.App@dd90e6b Visual services, such as WindowManager, WallpaperService or LayoutInflater should be accessed from Activity or other visual Context. Use an Activity or a Context created with Context#createWindowContext(int, Bundle), which are adjusted to the configuration and visual bounds of an area on screen.
java.lang.IllegalAccessException: Tried to access visual service WindowManager from a non-visual Context:com.camtest.App@dd90e6b
at android.app.ContextImpl.getSystemService(ContextImpl.java:1914)
at android.content.ContextWrapper.getSystemService(ContextWrapper.java:803)
at androidx.camera.camera2.internal.Camera2UseCaseConfigFactory.<init>(Camera2UseCaseConfigFactory.java:50)
at androidx.camera.camera2.Camera2Config.lambda$defaultConfig$1(Camera2Config.java:60)
at androidx.camera.camera2.-$$Lambda$Camera2Config$g_hY10kZhqC56um0PalOLTzuFlU.newInstance(Unknown Source:0)
at androidx.camera.core.CameraX.lambda$initAndRetryRecursively$9$CameraX(CameraX.java:575)
at androidx.camera.core.-$$Lambda$CameraX$u-Xx2b6YXY5GXNXRh-mDiDnHdpQ.run(Unknown Source:10)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
编辑#3:
从CameraX版本1.0.0-beta12更新到1.0.0-rc1(截至今天)没有任何效果错误表明您正在使用
应用程序
上下文,因为我猜测com.camtest.App
是什么。你能发布整个堆栈跟踪吗?在上面添加了堆栈跟踪。这是一个非常奇怪的堆栈跟踪。我不确定上下文是从哪里来的。如果您不使用最新的CameraX,您可以尝试升级。否则,如果您可以创建一个复制问题的示例项目,则可以在问题跟踪器上提交一个问题。即兴说来,你不会觉得自己做错了什么。你提供的“这个”上下文是不对的。这就是为什么它会给你这个错误。您是否尝试过使用getApplicationContext()或getBaseContext()?或者尝试在名为Context的CamText.class中创建全局变量;在OnCreate assign context=getApplicationContext()或getBaseContext()中,任何一种方法都是有效的。@CragMonkey我的最后一个赌注是将startCamera()和其他所有内容移动到MainActivity,并从那里开始。至少在测试中这样做,看看会发生什么。这是我唯一能建议的,就目前而言,也许我明天会想点什么。
E/ContextImpl: Tried to access visual service WindowManager from a non-visual Context:com.camtest.App@dd90e6b Visual services, such as WindowManager, WallpaperService or LayoutInflater should be accessed from Activity or other visual Context. Use an Activity or a Context created with Context#createWindowContext(int, Bundle), which are adjusted to the configuration and visual bounds of an area on screen.
java.lang.IllegalAccessException: Tried to access visual service WindowManager from a non-visual Context:com.camtest.App@dd90e6b
at android.app.ContextImpl.getSystemService(ContextImpl.java:1914)
at android.content.ContextWrapper.getSystemService(ContextWrapper.java:803)
at androidx.camera.camera2.internal.Camera2UseCaseConfigFactory.<init>(Camera2UseCaseConfigFactory.java:50)
at androidx.camera.camera2.Camera2Config.lambda$defaultConfig$1(Camera2Config.java:60)
at androidx.camera.camera2.-$$Lambda$Camera2Config$g_hY10kZhqC56um0PalOLTzuFlU.newInstance(Unknown Source:0)
at androidx.camera.core.CameraX.lambda$initAndRetryRecursively$9$CameraX(CameraX.java:575)
at androidx.camera.core.-$$Lambda$CameraX$u-Xx2b6YXY5GXNXRh-mDiDnHdpQ.run(Unknown Source:10)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
if( BuildConfig.BUILD_TYPE.contentEquals( "debug" ) ){
/*StrictMode.setThreadPolicy( new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build());*/
StrictMode.setVmPolicy( new StrictMode.VmPolicy.Builder()
.detectAll()//.detectNonSdkApiUsage()
.penaltyLog()
.build());
}