如何解决Android:窗口类型2038的权限被拒绝
我试图在android中创建浮动叠加空间。我有:
targetSdkVersion 30
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
我在上注册了服务
<service
android:name=".service.RecordService"
android:enabled="true"
android:foregroundServiceType="mediaProjection">
</service>
并运行
Intent intent = new Intent(MainActivity.this,RecordService.class);
intent.putExtra("cmd","start service");
startService(intent);
mediaProjection = mediaProjectionManager.getMediaProjection(resultCode,intent);
所有内容都中断了
mWindowManager = (WindowManager)getApplication().getSystemService(WINDOW_SERVICE);
mLayoutParams = new LayoutParams();
mLayoutParams.type = LayoutParams.TYPE_APPLICATION_OVERLAY;
mLayoutParams.format = PixelFormat.RGBA_8888;
mLayoutParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE;
mLayoutParams.gravity = Gravity.CENTER;
mLayoutParams.x = 0;
mLayoutParams.y = 0;
mLayoutParams.width = LayoutParams.WRAP_CONTENT;
mLayoutParams.height = LayoutParams.WRAP_CONTENT;
final LayoutInflater inflater = LayoutInflater.from(getApplication());
mFloatLayout = (FrameLayout)inflater.inflate(R.layout.layout_record,null);
mStartBtn = (TextView)mFloatLayout.findViewById(R.id.btn_start);
mStartBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(RecordService.this,"start recording");
startService(intent);
}
});
mFloatLayout.setVisibility(View.INVISIBLE);
mWindowManager.addView(mFloatLayout,mLayoutParams);
在最后一行:( 我在做什么错了?
我也尝试使用
mLayoutParams.type = LayoutParams.TYPE_PHONE;
mLayoutParams.type = LayoutParams.TYPE_SYSTEM_ALERT;
但有相同的问题:
Process: com.poqdev.screenrec,PID: 20517
java.lang.RuntimeException: Unable to create service com.poqdev.screenrec.service.RecordService: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@90e7698 -- permission denied for window type 2038
at android.app.ActivityThread.handleCreateService(ActivityThread.java:4204)
at android.app.ActivityThread.access$1500(ActivityThread.java:237)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@90e7698 -- permission denied for window type 2038
at android.view.ViewRootImpl.setView(ViewRootImpl.java:1092)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:409)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:109)
at com.poqdev.screenrec.service.RecordService.createFloatView(RecordService.java:145)
at com.poqdev.screenrec.service.RecordService.onCreate(RecordService.java:66)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:4192)
我在做什么错了?
解决方法
嗨,这可能有点晚了,但我遇到了同样的问题,我发现您必须在“设置”中授予您的应用“在其他应用上显示”的权限。将其设置为“允许”后,您应该不会看到此错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。