gpt4 book ai didi

java - 绘制在 android 8.0 上无法运行的其他应用程序

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:07 25 4
gpt4 key购买 nike

我有一个应用程序有一个小部件,允许聊天作为 float 小部件使用,有点像 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"/>

然后在我的 Activity 中我正在检查权限,如果被授予,它将尝试添加新 View ...

if(Settings.canDrawOverlays(this)) {
initializeChatHeadsView();
}

初始化ChatHeadsView,只是将布局添加到窗口。我已经启用了权限,如果我进入设备上的设置,我什至可以看到它已启用,我可以看到我的应用程序列在“显示在其他应用程序之上”权限页面中,所以它确实有权限,但每次我尝试添加应用程序崩溃的 View 并收到消息...

Unable to add window android.view.ViewRootImpl$W@f6948a0 -- permission denied for window type 2002

我不明白为什么它不起作用。 list 同时具有旧版本和新版本的权限,系统专门检查“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
);

现在它完美地工作了。

关于java - 绘制在 android 8.0 上无法运行的其他应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47499549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com