java – 绘制其他不适用于Android 8.0的应用程序

我有一个应用程序,它有一个小部件,允许聊天作为浮动小部件提供,有点像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
);

现在它完美无缺.

上一篇:android – Overlay.draw()调用很多次


下一篇:java jsp的动态添加行