您的位置:首页 > 其它

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

2015-11-30 21:06 423 查看
比如你建了一个悬浮框:

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无法接收触摸事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: