Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android FLAG_SHOW_WHEN_LOCKED被废弃

Android FLAG_SHOW_WHEN_LOCKED被废弃
EN

Stack Overflow用户
提问于 2018-01-16 00:53:03
回答 6查看 24.9K关注 0票数 21

在我的应用程序中,我有一个比所有其他应用程序都要显示窗口的作业服务,所以当它触发时,它需要显示这个窗口,即使屏幕被关闭&解锁并打开它。在以前的Android版本中,我已经实现了这种行为,但在Android中,它并不像我预期的那样工作。

我读到需要使用标志TYPE_APPLICATION_OVERLAY,并在清单文件中添加权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

因此,当屏幕打开时,它可以正常工作,但当屏幕关闭时,我注意到它没有打开屏幕,当我打开屏幕时,我看到窗口是在其他应用程序之上创建的。

因此,我的问题是,既然在Android 27中反对使用FLAG_TURN_SCREEN_ONFLAG_SHOW_WHEN_LOCKED标志,那么替代方法是什么呢?

这是我目前的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void showView()
{
    if (!wakeLockAcquired)
    {
        wakeLock.acquire();
        wakeLockAquired = true;
    }

    windowManager = (WindowManager)context.getSystemService(WINDOW_SERVICE);

    final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 0, 0,
            WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
            ,
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                    | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                    | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON ,
            PixelFormat.RGBA_8888);

    RelativeLayout layout = buildView();
    windowManager.addView(layout, layoutParams);
    windowManager.updateViewLayout(layout, layoutParams);
}

备注:

  • buildView是一个返回relativeLayout的函数,在这个函数中我动态地添加内容(TextView、ImageView等.)。
  • wakeLockAcquired是一个布尔成员,当视图被销毁时,它会设置为false。
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-01-16 04:12:24

好的,我设法解决了这个问题,找到了一些解决办法,并得到了@Umair的帮助。

正如我说过的,我正在显示一个使用WindowManager在后台服务中创建的视图,在上面添加的代码中,该视图显示在所有其他应用程序之上,但当Android版本为Android8时,该视图不会打开屏幕。

现在取代Flags:FLAG_SHOW_WHEN_LOCKED FLAG_TURN_SCREEN_ON的方法对于活动是可见的,而不是对于服务或WindowManager,并且将上下文转换为Activity不是一个好主意,也无助于您:)

所以我现在所做的(临时解决方案)是创建一个透明的活动,当我从后台服务调用showView()方法时,我也开始透明的活动。

在活动--在onCreate方法中,我调用以下方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setShowWhenLocked(true) 
setTurnScreenOn(true)

当视图被销毁时,活动也将在广播接收器的帮助下被销毁:)因此,屏幕现在被打开,视图高于所有其他应用程序。

我知道,您可以告诉我,我可以将服务中的代码移动到新的活动中。

我这么做的原因是:

我在用语音识别器..。当我在活动中对它进行编码时,事情就不起作用了。我的意思是,当屏幕被模式锁定时,活动会进入暂停状态,而我无法得到结果。所以这个模式否定了我的活动。

因此,我决定使用窗口管理器创建一个视图,直到现在,它一直运行良好--那时Google (Android团队)决定放弃这些标志。所以这是我现在的解决方案。我希望有人能为这个问题找到更好的解决办法。

票数 15
EN

Stack Overflow用户

发布于 2018-05-03 08:22:20

如果attr turnScreenOn是真的,则KeyguardManager打开屏幕,所以方法的顺序和调用requestDismissKeyguard是必要的。我使用这段代码进行活动,希望它能有所帮助:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        setShowWhenLocked(true)
        setTurnScreenOn(true)
        val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
        keyguardManager.requestDismissKeyguard(this, null)
    } else {
        this.window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
    }
}
票数 28
EN

Stack Overflow用户

发布于 2018-01-16 01:00:14

因此,根据android文档,这些方法是不推荐的,因此您需要使用showWhenLocked or setShowWhenLocked(boolean)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FLAG_TURN_SCREEN_ON

int FLAG_TURN_SCREEN_ON 这个常量在API级别27中被废弃。使用turnScreenOn或setTurnScreenOn(布尔值)来防止意外的双重生命周期事件. 窗口标志:当设置为窗口被添加或使之可见时,一旦窗口被显示,系统就会戳开电源管理器的用户活动(就像用户唤醒了设备一样)来打开屏幕。

FLAG_SHOW_WHEN_LOCKED

int FLAG_SHOW_WHEN_LOCKED 这个常量在API级别27中被废弃。使用showWhenLocked或setShowWhenLocked(布尔值)来防止意外的双重生命周期事件. 窗口标志:在屏幕锁定时让窗口显示的特殊标志。这将使应用程序窗口优先于密钥保护或任何其他锁定屏幕。可以与FLAG_KEEP_SCREEN_ON一起使用,在显示键保护窗口之前直接打开屏幕并显示窗口。可与FLAG_DISMISS_KEYGUARD一起使用,以自动完全解除非安全的密钥保护。此标志仅适用于最顶部的全屏窗口.

因此,根据文档,反对这些方法的原因是为了避免an unintentional double life-cycle event.,您可以在这里更多地了解它们。https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48277302

复制
相关文章
图像特效显示(上)
准备11月份更一个新的系列,之前看的杨淑莹老师的《数字图像处理Visual Studio C++技术实现》,里面的代码都没来得及打,而且其是基于自定义的图像类实现的,这个系列就把所有例程移植为opencv-C++实现,也就是算法逻辑用C++实现,图像对象使用opencv自带的图像类。
周旋
2022/08/07
1.1K0
图像特效显示(上)
(译)SDL编程入门(2)在屏幕上显示图像
注意:从现在开始,教程将只涉及源代码的关键部分。如果想看完整的程序,你必须下载完整的源码。
arcticfox
2020/09/24
2.7K0
Python+Matplotlib显示图像并实时局部放大
在主坐标系中显示一幅图像,在右上角创建子坐标系并随着鼠标移动实时放大显示图像的局部。
Python小屋屋主
2023/02/28
1.1K0
Python+Matplotlib显示图像并实时局部放大
IOS – OpenGL ES 图像凹面镜放大效果 GPUImagePinchDistortionFilter
GPUImagePinchDistortionFilter 属于 GPUImage 图像视觉效果相关,用来处理图像凹面镜放大。shader 源码如下:
猿说编程[Python和C]
2023/04/01
4220
在iOS上推流
编译librtmp需要用到openssl,所以先编译openssl,下载脚本OpenSSL。
Helloted
2022/06/07
8650
在iOS上推流
怎样在ios上上架app
在上架App之前想要 真机测试的同学 请查看 iOS- 最全的真机测试教程 里面包含怎么让多台电脑同时 上架App和同时真机调试。P12文件的使用详解
iOS程序应用
2023/01/13
5350
iOS 图片浏览的放大缩小
功能描述:支持网络和本地gif、jpeg等格式图片的浏览、捏合或双击放大缩小、长按保存到本地相册、获取gif图片的循环次数和时长。 效果预览.gif 主要部分:创建一个继承于UIScrollView的
且行且珍惜_iOS
2018/05/22
3.9K0
深度学习应用:iOS 上的图像风格迁移
图像风格迁移,用 python 就可以实现,如果想要在手机上面(不联网)查看效果怎么办呢?
iOSDevLog
2019/02/20
1.1K0
数字图像放大算法
上一篇推送中,为大家介绍了几种图像处理算法总结的方法,在本次推送中,二白继续为大家介绍余下的方法。
小白学视觉
2019/10/24
1.7K0
在Android和iOS上设置手机ip详细教程
大家好!今天我们将分享一个关于如何在Android和iOS设备上设置手机ip(Layer 2 Tunneling Protocol)的简易教程。如果你想要通过安全且可靠的方式连接到远程网络,那么跟着本文一起学习吧!无需复杂操作,让我们开始愉快地探索吧!
华科云商小徐
2023/09/07
6010
老司机带你走进Core Animation 之粒子发射、TileLayer与异步绘制
老司机带你走进Core Animation 之粒子发射、TileLayer与异步绘制
老司机Wicky
2018/08/22
9750
老司机带你走进Core Animation 之粒子发射、TileLayer与异步绘制
原-图像处理基础(二)图像的放大与缩小
最近邻插值法 其中 size(g(x))代表图像像素矩阵列宽 size(g(y))代表图像像素矩阵行高 scale 代表缩放倍数 \begin{matrix} f(x)=g(round(x),r
Pulsar-V
2018/04/28
2.9K0
原-图像处理基础(二)图像的放大与缩小
iOS 的系统类信息在栈上?
前言 今天有位群友抛出了一个很有意思的问题:为什么系统类的 class 地址比栈区变量更高? image-20210519235852843 iOS 进程内存布局 通常情况下,我们对进程内存的布局
酷酷的哀殿
2021/06/22
8130
iOS 的系统类信息在栈上?
c#利用Halcon的图像显示控件显示图像
?
vv彭
2020/10/27
2.9K0
c#利用Halcon的图像显示控件显示图像
将jpeg图片显示在framebuffer上
点击(此处)折叠或打开 /************************************************** * example5.c * Author: T-bagwell * * Compile:gcc -Wall example5.c -o example5 *************************************************/ #include <stdio.h> #inclu
用户3765803
2019/03/05
1.2K0
Upscayl,引领 AI 图像放大技术
在数字时代,图像无处不在。无论是在社交媒体上分享照片,还是在商业领域中进行品牌宣传,我们都希望能够呈现出清晰、精美的图像。然而,有时候我们只能获得低分辨率的图像,这让我们感到困惑和失望。但是,现在有一个令人兴奋的解决方案——Upscayl,这是一项引领 AI 图像放大技术的在线工具。
程序那些事儿
2023/10/07
6280
Upscayl,引领 AI 图像放大技术
iOS 图片预览 放大缩小的实现方式
把UIImageView放到UIScrollView中 对UIImageView添加点击事件实现
码客说
2019/10/22
2.5K0
图像放大处理过程
设置图像放大使用的方法,插值或者不插值 RenderOptions.SetBitmapScalingMode(grid, BitmapScalingMode.NearestNeighbor);
sofu456
2021/12/06
4200
图像放大处理过程
8. 图像处理的应用 - 动作放大
上一次我给大家提到了延时摄影作品中通常会有随机的短期抖动,我介绍了一种算法可以分离短期和长期的运动,并通过滤除短期抖动、增强长期运动来获取到平滑的视频。而很多时候,我们会对视频中的非常隐晦的时域变化感兴趣。所以这一次我会介绍一个计算摄影技术构成的"动作放大器",它能够高效的将视频中的难以用肉眼察觉的变化分离出来,并在重新渲染过程中进行放大,生成新的视频。我初次接触这个应用方向时大吃一惊,我希望也能够带给你这种感觉。
HawkWang
2020/04/17
1.1K0
8. 图像处理的应用 - 动作放大
如何快速制作放大图像效果?
3. 右键选择椭圆工具,然后按住shfit键,在画布上画出一个合适大小的正圆形。
Mark Chen
2020/11/02
1.9K0
如何快速制作放大图像效果?

相似问题

放大iOS上的图像视图

12

在没有CATiledLayer的情况下,iOS应用中的巨大图像?

20

缩点识别器手势IOS上的图像缩放

10

iOS - CATiledLayer renderInContext:畸变图像的结果

11

捏缩以放大镀铬

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文