zoukankan      html  css  js  c++  java
  • permission denied for window type 2003

    今天在做系统悬浮窗的时候出现权限拒绝,类型是2003,这里要说下,做系统悬浮窗需要申请权限,6.0以上的 还需要动态申请下,这里我就不过多描述了,

    我在申请完权限后仍然不行,这里主要是出现在了这个类型的设置上,上边代码是错误的,也就是TYPE_SYSTEM_ALERT因为这个被遗弃了,不赞成使用,

    进去后看到,让使用 TYPE_APPLICATION_OVERLAY

    因此我们需要根据不同版本使用不同代码

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){//6.0
    params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    }else {
    params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
    }
    修改后:

    
    

       全部代码如下:(这里也是百度出来的)

       

        private void createFloatView()    {
            Button btn_floatView = new Button(App.getContext());
            btn_floatView.setText("悬浮窗");
            final WindowManager wm = (WindowManager) App.getContext().getSystemService(Context.WINDOW_SERVICE);
            final WindowManager.LayoutParams   params = new WindowManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
            // 设置window type
            //params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){//6.0+
                params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
            }else {
                params.type =  WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
            }
    
          /* * 如果设置为params.type = WindowManager.LayoutParams.TYPE_PHONE; 那么优先级会降低一些,
            * 即拉下通知栏不可见         */
            params.format = PixelFormat.RGBA_8888;
            // 设置图片格式,效果为背景透明
            // 设置Window flag
            params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
          /* * 下面的flags属性的效果形同“锁定”。 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。
               * wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL| LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE;
                * */
            // 设置悬浮窗的长得宽
    //        params.width = 100;
            params.height = 100;
            params.x=0;
            params.y=-1080;
            // 设置悬浮窗的Touch监听
            final Button finalBtn_floatView = btn_floatView;
            btn_floatView.setOnTouchListener(new View.OnTouchListener() {
                int lastX, lastY;
                int paramX, paramY;
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            lastX = (int) event.getRawX();
                            lastY = (int) event.getRawY();
                            paramX = params.x;
                            paramY = params.y;
                            break;
                        case MotionEvent.ACTION_MOVE:
                            int dx = (int) event.getRawX() - lastX;
                            int dy = (int) event.getRawY() - lastY;
                            params.x = paramX + dx;
                            params.y = paramY + dy;
                            // 更新悬浮窗位置
                            wm.updateViewLayout(finalBtn_floatView, params);
                            break;
                    }                return true;
                }
            });
            wm.addView(btn_floatView, params);
            wm.updateViewLayout(finalBtn_floatView, params);
            isAdded = true;
        }
  • 相关阅读:
    "error while loading shared libraries: xxx.so.x" 错误的原因和解决办法 java程序员
    Android巴士转发 java程序员
    好记性不如烂笔头之 ——CP命令 java程序员
    linux之移植内核linux2.6.32psp03.00.01.06 编译出错 java程序员
    eoeAndroid社区转发 java程序员
    id 与 class的区别
    ASP+ACCESS转成ASP+SQL程序应如何修改
    怎么样才能让层显示在FLASH之上呢
    用Javascript作消息提示框(类似于QQ用户上线的消息提示)
    改善用户体验之Alert提示效果
  • 原文地址:https://www.cnblogs.com/lizhanqi/p/8214319.html
Copyright © 2011-2022 走看看