3 回答
TA贡献1862条经验 获得超6个赞
对于应该是完全明显的原因,普通的应用程序不允许在锁定屏幕上创建任意窗口。如果我在锁屏上创建一个可以完美模仿真实锁屏的窗口,你怎么能这么做呢?
您的错误的技术原因是使用TYPE_KEYGUARD_DIALOG标志 - 它需要android.permission.INTERNAL_SYSTEM_WINDOW哪个是签名级权限。这意味着只有使用与权限创建者相同的证书签名的Apps 才能使用它。
android.permission.INTERNAL_SYSTEM_WINDOWAndroid系统本身的创建者,所以除非你的应用程序是操作系统的一部分,否则你没有机会。
有明确定义且记录良好的方式来通知用户来自锁屏的信息。您可以创建在锁屏上显示的自定义通知,用户可以与它们进行交互。
TA贡献1788条经验 获得超4个赞
如果你使用apiLevel >= 19,不要使用
WindowManager.LayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
得到以下错误:
android.view.WindowManager $ BadTokenException:无法添加窗口android.view.ViewRootImpl$W@40ec8528 - 此窗口类型的权限被拒绝
请改用:
LayoutParams.TYPE_TOAST or TYPE_APPLICATION_PANEL
TA贡献1868条经验 获得超4个赞
我想你应该区分目标(奥利奥之前和之后)
int LAYOUT_FLAG;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_PHONE;
}
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
LAYOUT_FLAG,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
- 3 回答
- 1 关注
- 1805 浏览
添加回答
举报