我有一个应用程序,它有一个小部件,允许聊天作为浮动小部件提供,有点像FB.它适用于较低版本的Android,但由于某种原因,它无法在Android 8.0上运行.我已经阅读了权限的更改,在我的AndroidManifest.xml文件中,我已经声明了两个权限…
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.TYPE_APPLICATION_OVERLAY"/>
然后在我的活动中,我正在检查权限,如果它被授予,它将尝试添加新视图…
if(Settings.canDrawOverlays(this)) {
initializeChatHeadsView();
}
initializeChatHeadsView,只是将布局添加到窗口.我已启用权限,我甚至可以看到它已启用,如果我进入设备上的设置,我可以看到我的应用程序列在“显示在其他应用程序”权限页面,所以它确实有权限,但每次我尝试添加应用程序崩溃的视图,我收到消息…
Unable to add window android.view.ViewRootImpl$W@f6948a0 — permission
denied for window type 2002
我不明白为什么它不起作用.清单具有较旧版本和较新版本的权限,系统专门检查“canDrawOverlays”,它在我拥有的每个模拟器上运行良好,除了运行Android 8.0的模拟器.
如果需要,我非常乐意展示更多代码.任何帮助将非常感激.谢谢.
解决方法:
我发现了这个问题.如果其他人在Android 8.0中使用其他应用程序的应用程序有问题,我不得不改变我构建窗口的方式….
int layoutType;
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
layoutType = WindowManager.LayoutParams.TYPE_PHONE;
} else {
layoutType = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
}
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
layoutType,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
);
现在它完美无缺.