• 小米Adnroid默认禁止悬浮框的使用,导致开发的悬浮框无法接收事件


    比如你建了一个悬浮框:

    WindowManager windowManager = getWindowManager(context);
    		int screenWidth = windowManager.getDefaultDisplay().getWidth();
    		if (smallWindow == null) {
    			smallWindow = new FloatWindowSmallView(context);
    			if (smallWindowParams == null) {
    				smallWindowParams = new LayoutParams();
    				smallWindowParams.type = LayoutParams.TYPE_PHONE;
    				smallWindowParams.format = PixelFormat.RGBA_8888;
    				smallWindowParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
    						| LayoutParams.FLAG_NOT_FOCUSABLE;
    				smallWindowParams.gravity = Gravity.LEFT | Gravity.TOP;
    				smallWindowParams.width = FloatWindowSmallView.viewWidth;
    				smallWindowParams.height = FloatWindowSmallView.viewHeight;
    				smallWindowParams.x = screenWidth;
    				smallWindowParams.y = 0;
    				smallWindow.setVoipUIPaddingBottom(paddingBottom);
    			}
    			smallWindow.setParams(smallWindowParams);
    			windowManager.addView(smallWindow, smallWindowParams);
    		}
    

    如果你用的是小米手机,你会发现这个窗口接收不到消息,消息会透传到下一层,如果下一层没有接收者,才会被接收。此时你把【安全中心】->【授权管理】->[应用权限管理]->【权限管理】中你的app的悬浮框设置为允许,就可以接收到消息了。这应该是小米ROM自己独特的地方,拿过其他手机测试都不存在这个情况。所以开发Android就这点不好,碎片化太严重,各有各的特色。

    【后记】后来无意中看到一篇文章,可以在不使用权限的情况下展示悬浮窗,并兼容小米特殊ROM的情况 链接:http://www.jianshu.com/p/167fd5f47d5c  或者 http://www.liaohuqiu.net/cn/posts/android-windows-manager/

    解决方案如下:

    在手机API Level>=19的情况下,设置type为TYPE_TOAST, 低版本使用TYPE_PHONE  

    因为在低版本上TYPE_TOAST无法接收触摸事件。

  • 相关阅读:
    apache solr简单搭建
    Flash学习初总结
    UWP多设备加载不同xaml布局文件
    鼠标右键多余选项删除
    用命令查看win10/win8.1等详细激活信息方法:
    win10 登陆选项 无法打开
    UWP应用开发:添加复制按钮,添加引用
    notepad++详细介绍!
    Python安装出现2503 2502 问题解决!
    Genymotion插件安装教程
  • 原文地址:https://www.cnblogs.com/cmgrass/p/5008397.html
Copyright © 2020-2023  润新知