android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an appli

在service中通过WindowManager创键自定义view的时候出现如下错误:

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

百度了一下也没有找到有效的解决办法,后来发现是自己的代码出现了问题,在设置WindowManager.LayoutParams时必须指定layoutParams.type,然后再addView。

layoutParams = new WindowManager.LayoutParams();
layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;// 该类型提供与用户交互,置于所有应用程序上方,但是在状态栏后面
//layoutParams.type = -2; //这个是android系统的漏洞,不需要申请创建android.permission.SYSTEM_ALERT_WINDOW(悬浮窗)的权限

layoutParams.gravity = Gravity.LEFT | Gravity.TOP; // 调整悬浮窗口至左上角
<span style="white-space:pre">		</span>layoutParams.width = 150;
<span style="white-space:pre">		</span>layoutParams.height = 150;
<span style="white-space:pre">		</span>layoutParams.format = PixelFormat.RGBA_8888;
<span style="white-space:pre">		</span>final MyFloatView view = new MyFloatView(this);
<span style="white-space:pre">		</span>windowManager.addView(view, layoutParams);
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>view.setOnTouchListener(new OnTouchListener() {
<span style="white-space:pre">			</span>
<span style="white-space:pre">			</span>@Override
<span style="white-space:pre">			</span>public boolean onTouch(View v, MotionEvent event) {
<span style="white-space:pre">				</span>
<span style="white-space:pre">				</span>rawx = (int) event.getRawX();
<span style="white-space:pre">				</span>rawy = (int) event.getRawY(); 
<span style="white-space:pre">				</span>
<span style="white-space:pre">				</span>int action = event.getAction();
<span style="white-space:pre">				</span>switch(action){
<span style="white-space:pre">				</span>case MotionEvent.ACTION_DOWN:
<span style="white-space:pre">					</span>x = (int) event.getX();
<span style="white-space:pre">					</span>y = (int) event.getY();
<span style="white-space:pre">					</span>break;
<span style="white-space:pre">				</span>case MotionEvent.ACTION_MOVE:
<span style="white-space:pre">					</span>layoutParams.x =  -x + rawx;
<span style="white-space:pre">					</span>layoutParams.y =  -y + rawy;
<span style="white-space:pre">					</span>windowManager.updateViewLayout(view, layoutParams);
<span style="white-space:pre">					</span>break;
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>return false;
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>});


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值