Android在状态栏中添加视图

Posted

技术标签:

【中文标题】Android在状态栏中添加视图【英文标题】:Android add view in status bar 【发布时间】:2012-11-16 18:48:43 【问题描述】:

这是我添加视图的代码:

        LayoutInflater layoutInflater = (LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    TextView tv = (TextView) layoutInflater.inflate(R.layout.textview, null);
    final View view = tv;
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT, 25,
            WindowManager.LayoutParams.TYPE_STATUS_BAR,
            WindowManager.LayoutParams.FLAG_SCALED
            , PixelFormat.TRANSLUCENT);


    WindowManager wm = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);
    wm.addView(view, lp);

但它会给我一个错误:

android.view.WindowManager$BadTokenException: 无法添加窗口 android.view.ViewRootImpl$W@41668948 -- 此窗口类型的权限被拒绝

所以我在 android manifast 中添加权限

  <uses-permission android:name="android.permission.STATUS_BAR" />

但还是有错误,我需要帮助!!

【问题讨论】:

【参考方案1】:

为了在状态栏顶部绘制视图,这是在阅读了这么多堆栈溢出帖子后对我有用的组合:

1- 您需要在您的服务或活动上拥有此 LayoutParameters 的 WindowManager:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
    WindowManager.LayoutParams.MATCH_PARENT, 
    statusBarHeight, 
    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |       
    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | 
    WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | 
    WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    PixelFormat.TRANSLUCENT);

2- 您只需要在您的 android 清单上获得此权限:

uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"

希望对您有所帮助。就我而言,我只需要用半透明的黄色或绿色为状态栏着色,以表明用户当前正在通话中

【讨论】:

很好,但是在此窗口管理器上未启用点击,我尝试更改标志但我无法让它听点击(之前使用不同的标志工作正常),有没有解决方案为此...我在该区域显示自定义祝酒词【参考方案2】:

从代码 sn-p 来看,就像您正在尝试创建一个新的 状态栏窗口, 这是不可能的。 (有一个状态栏,由系统 UI 管理。)

你能描述一下你想要做什么吗?通常,您使用Notification 和NotificationManager API 与状态栏进行交互。

【讨论】:

【参考方案3】:

好的,这应该可以工作:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

【讨论】:

您还有其他想法可能是什么问题吗? 你可以包括一个堆栈跟踪

以上是关于Android在状态栏中添加视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在android系统状态栏中显示文本

为啥我的 phongap 应用程序在 android 状态栏中显示一个汉堡包图标?

Android appbarlayout 高程出现在状态栏中

XCode 在呼叫状态栏中更改视图

如何在 Android Dev 的状态栏中检查哪些通知处于活动状态?

Android - 通知不会出现在状态栏中