Joh*_*nha 8 java android kotlin
粘性是指不会因调用启动器意图(intent.addCategory(Intent.CATEGORY_HOME
)而关闭的窗口。
以前是通过完成此操作的WindowManager.LayoutParams.TYPE_PHONE
,但是现在不建议使用此类型,并且会在api 28上引发异常:
WindowManager $ BadTokenException ...窗口类型2002的权限被拒绝
由于Facebook的Messenger在其聊天窗口“ Heads”中进行了这种行为,因此仍然可能会发生这种行为,这是基于这样的假设:由于Facebook已预先安装在许多rom上,因此没有获得系统应用程序许可。
使用WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
不起作用(即,按下主页按钮也会隐藏覆盖窗口)。
编辑:问题是当用户单击主屏幕按钮/调用启动器意图时,如何具有不被删除的覆盖窗口。并非如此TYPE_APPLICATION_OVERLAY
,这是事实,TYPE_PHONE
但已过时。
编辑2:显然,这确实对某些人有用,这是我正在运行的代码:
class MyClass {
var params: WindowManager.LayoutParams = WindowManager.LayoutParams(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
else WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT
).apply {
windowAnimations = android.R.style.Animation_Dialog
gravity = Gravity.CENTER or Gravity.CENTER
x = 0
y = 0
}
var windowManager: WindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
init {
val layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
rootView = layoutInflater.inflate(R.layout.view_overlay, null)
windowManager.addView(rootView, params)
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案:不要直接将覆盖层扩展至其他应用程序之上。
通常,使用TYPE_APPLICATION_OVERLAY
still 的行为为TYPE_PHONE
,我的情况的问题是,windowManager.addView(rootView, params)
当另一个应用程序的活动位于前台时,我正在显示我的视图 ( ),并且 Android 会将视图附加到当前前台活动,因此当用户退出该活动时(例如,通过按主页按钮),系统还会从我的应用程序中删除覆盖层。对我来说,解决方案非常具体,我没有通用的解决方案,但这些信息应该可以帮助人们找到一个解决方案。
归档时间: |
|
查看次数: |
523 次 |
最近记录: |