gpt4 book ai didi

java - 在 Broadcast Receiver 中有效的代码在 Activity 中无效

转载 作者:行者123 更新时间:2023-11-30 03:15:13 25 4
gpt4 key购买 nike

以下代码在 BroadcastReceiver 中运行,并向系统级窗口管理器添加透明覆盖以保持横向模式的方向。此代码工作正常。

但是,当我将此代码放入 Activity 中以让 Activity 添加叠加层时,没有任何反应。对于我的生活,我无法弄清楚为什么。我把它放在一个从 OnClickListener 调用的方法中。我知道该方法被调用是因为我在方法顶部放置了一条 Toast 消息。

        final View view = new View(context);
int dimension = 0;
int pixelFormat = PixelFormat.TRANSLUCENT;

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
dimension, dimension,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
pixelFormat);
params.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
final WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
wm.addView(view, params);

这段代码有什么问题不让它在 Activity 中运行?

在 Activity 中,context 的每个实例都被替换为this。这可能是问题所在吗?

最佳答案

问题很可能出在您的上下文中。

事实证明,广播接收器中 onReceive 方法中的上下文与 Activity 的 context 不同。它会膨胀 UI 元素,但膨胀将使用您正在运行的系统的默认主题完成,而不是您的应用程序中定义的主题。 (你必须意识到这一点,以防这成为一个问题)。

另一方面,当您在 onClickListener 内部时,这个 onClickListener 是匿名的还是硬引用?

例如:你在做什么

yourButton.setOnClickListener( new View.OnClickListener() { //code }; );

关于java - 在 Broadcast Receiver 中有效的代码在 Activity 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20254593/

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