android中window和view,Android为什么添加View到Window中会报错?

当我按照如下方法添加View到Window上时:

//改代码参考网上的

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);

if (Build.VERSION.SDK_INT >= 24) {

if (Settings.canDrawOverlays(this)) {

addView2Window();

} else {

startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION));

}

} else {

addView2Window();

}

}

private void addView2Window() {

Button button = new Button(this);

button.setText("按钮");

WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, 0, PixelFormat.TRANSPARENT);

layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;

layoutParams.gravity = Gravity.CENTER;

layoutParams.x = 100;

layoutParams.y = 300;

mWindowManager.addView(button, layoutParams);

}

报如下错误:

Process: io.github.grooters.eight, PID: 725

java.lang.RuntimeException: Unable to start activity ComponentInfo{io.github.grooters.eight/io.github.grooters.eight.MainActivity}: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@c6dfe60 -- permission denied for window type 2002

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)

at android.app.ActivityThread.-wrap12(Unknown Source:0)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)

at android.os.Handler.dispatchMessage(Handler.java:108)

at android.os.Looper.loop(Looper.java:166)

at android.app.ActivityThread.main(ActivityThread.java:7425)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@c6dfe60 -- permission denied for window type 2002

at android.view.ViewRootImpl.setView(ViewRootImpl.java:908)

at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:372)

at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:128)

at io.github.grooters.eight.MainActivity.addView2Window(MainActivity.java:42)

at io.github.grooters.eight.MainActivity.onCreate(MainActivity.java:25)

at android.app.Activity.performCreate(Activity.java:7372)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)

at android.app.ActivityThread.-wrap12(Unknown Source:0)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)

at android.os.Handler.dispatchMessage(Handler.java:108)

at android.os.Looper.loop(Looper.java:166)

at android.app.ActivityThread.main(ActivityThread.java:7425)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

我查了网上很多资料尝试了以下方法:

添加权限

允许在其他应用上层显示内容

但都报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值