您的位置:首页 > 移动开发

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

2015-04-01 19:50 501 查看
在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>});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐