codelab-android-accessibility
codelab-android-accessibility copied to clipboard
IllegalAccessException in StrictMode
When I enable StrictMode, I can see IllegalAccessException in the log.
What is the correct way to show overlay in AccessibilityService?
@Override
protected void onServiceConnected() {
super.onServiceConnected();
debugStrictMode();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
FrameLayout mLayout = new FrameLayout(this);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
lp.format = PixelFormat.TRANSLUCENT;
lp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.TOP;
LayoutInflater inflater = LayoutInflater.from(this);
inflater.inflate(R.layout.action_bar, mLayout);
wm.addView(mLayout, lp);
}
void debugStrictMode() {
StrictMode.VmPolicy.Builder policyBuilder = (new StrictMode.VmPolicy.Builder())
.detectAll()
.penaltyLog()
.penaltyListener(getMainExecutor(), v -> Log.d("StrictMode", "onVmViolation: " + v));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
policyBuilder.detectUnsafeIntentLaunch();
}
StrictMode.setVmPolicy(policyBuilder.build());
}
E/StrictMode: Tried to access the API:ViewConfiguration which needs to have proper configuration from a non-UI Context:com.example.android.globalactionbarservice.GlobalActionBarService@b1bf96a The API:ViewConfiguration needs a proper configuration. Use UI contexts such as an activity or a context created via createWindowContext(Display, int, Bundle) or createConfigurationContext(Configuration) with a proper configuration.
java.lang.IllegalAccessException: Tried to access the API:ViewConfiguration which needs to have proper configuration from a non-UI Context:com.example.android.globalactionbarservice.GlobalActionBarService@b1bf96a
at android.os.StrictMode.assertConfigurationContext(StrictMode.java:2296)
at android.view.ViewConfiguration.get(ViewConfiguration.java:522)
at android.view.View.<init>(View.java:5307)
at android.view.View.<init>(View.java:5452)
at android.view.ViewGroup.<init>(ViewGroup.java:702)
at android.view.ViewGroup.<init>(ViewGroup.java:698)
at android.view.ViewGroup.<init>(ViewGroup.java:694)
at android.view.ViewGroup.<init>(ViewGroup.java:690)
at android.widget.FrameLayout.<init>(FrameLayout.java:85)
at com.example.android.globalactionbarservice.GlobalActionBarService.onServiceConnected(GlobalActionBarService.java:36)
at android.accessibilityservice.AccessibilityService.dispatchServiceConnected(AccessibilityService.java:762)
at android.accessibilityservice.AccessibilityService.access$100(AccessibilityService.java:236)
at android.accessibilityservice.AccessibilityService$2.onServiceConnected(AccessibilityService.java:2160)
at android.accessibilityservice.AccessibilityService$IAccessibilityServiceClientWrapper.executeMessage(AccessibilityService.java:2404)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7842)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
D/StrictMode: StrictMode policy violation: android.os.strictmode.IncorrectContextUseViolation: The API:LayoutInflater needs a proper configuration. Use UI contexts such as an activity or a context created via createWindowContext(Display, int, Bundle) or createConfigurationContext(Configuration) with a proper configuration.
at android.os.StrictMode.onIncorrectContextUsed(StrictMode.java:2261)
at android.os.StrictMode.assertConfigurationContext(StrictMode.java:2297)
at android.view.LayoutInflater.<init>(LayoutInflater.java:260)
at com.android.internal.policy.PhoneLayoutInflater.<init>(PhoneLayoutInflater.java:44)
at android.app.SystemServiceRegistry$33.createService(SystemServiceRegistry.java:534)
at android.app.SystemServiceRegistry$33.createService(SystemServiceRegistry.java:531)
at android.app.SystemServiceRegistry$CachedServiceFetcher.getService(SystemServiceRegistry.java:1848)
at android.app.SystemServiceRegistry.getSystemService(SystemServiceRegistry.java:1525)
at android.app.ContextImpl.getSystemService(ContextImpl.java:2064)
at android.content.ContextWrapper.getSystemService(ContextWrapper.java:857)
at android.accessibilityservice.AccessibilityService.getSystemService(AccessibilityService.java:2075)
at android.view.LayoutInflater.from(LayoutInflater.java:288)
at com.example.android.globalactionbarservice.GlobalActionBarService.onServiceConnected(GlobalActionBarService.java:44)
at android.accessibilityservice.AccessibilityService.dispatchServiceConnected(AccessibilityService.java:762)
at android.accessibilityservice.AccessibilityService.access$100(AccessibilityService.java:236)
at android.accessibilityservice.AccessibilityService$2.onServiceConnected(AccessibilityService.java:2160)
at android.accessibilityservice.AccessibilityService$IAccessibilityServiceClientWrapper.executeMessage(AccessibilityService.java:2404)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7842)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: java.lang.IllegalAccessException: Tried to access the API:LayoutInflater which needs to have proper configuration from a non-UI Context:com.example.android.globalactionbarservice.GlobalActionBarService@b1bf96a
at android.os.StrictMode.assertConfigurationContext(StrictMode.java:2296)
at android.view.LayoutInflater.<init>(LayoutInflater.java:260)
at com.android.internal.policy.PhoneLayoutInflater.<init>(PhoneLayoutInflater.java:44)
at android.app.SystemServiceRegistry$33.createService(SystemServiceRegistry.java:534)
at android.app.SystemServiceRegistry$33.createService(SystemServiceRegistry.java:531)
at android.app.SystemServiceRegistry$CachedServiceFetcher.getService(SystemServiceRegistry.java:1848)
at android.app.SystemServiceRegistry.getSystemService(SystemServiceRegistry.java:1525)
at android.app.ContextImpl.getSystemService(ContextImpl.java:2064)
at android.content.ContextWrapper.getSystemService(ContextWrapper.java:857)
at android.accessibilityservice.AccessibilityService.getSystemService(AccessibilityService.java:2075)
at android.view.LayoutInflater.from(LayoutInflater.java:288)
at com.example.android.globalactionbarservice.GlobalActionBarService.onServiceConnected(GlobalActionBarService.java:44)
at android.accessibilityservice.AccessibilityService.dispatchServiceConnected(AccessibilityService.java:762)
at android.accessibilityservice.AccessibilityService.access$100(AccessibilityService.java:236)
at android.accessibilityservice.AccessibilityService$2.onServiceConnected(AccessibilityService.java:2160)
at android.accessibilityservice.AccessibilityService$IAccessibilityServiceClientWrapper.executeMessage(AccessibilityService.java:2404)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7842)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)