状态栏中的Android添加视图

状态栏中的Android添加视图,android,notifications,statusbar,Android,Notifications,Statusbar,这是我添加视图的代码: LayoutInflater layoutInflater = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); TextView tv = (TextView) layoutInflater.inflate(R.layout.textview, null); final View view = tv; Wind

这是我添加视图的代码:

        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" />

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

好,这应该可以:

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

好,这应该可以:

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

从代码片段中,您似乎正在尝试创建一个新的状态栏窗口,但这是不可能的。(有一个状态栏,由系统UI管理。)


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

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


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

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

1-您的服务或活动中需要有此布局参数的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"

希望有帮助。在我的例子中,我只需要将状态栏染成黄色或绿色,以表示用户当前正在进行一个活动调用

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

1-您的服务或活动中需要有此布局参数的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"

希望有帮助。在我的例子中,我只需要将状态栏着色为黄色或绿色,以表示用户当前正在进行一个活动调用

您是否知道问题可能是什么?您是否可以包括堆栈跟踪?您是否有任何其他想法问题可能是什么?您是否可以包括堆栈跟踪,但是点击在这个窗口管理器上没有启用,我尝试过改变标志,但是我不能让它听到点击(以前使用不同的标志工作正常),有解决方案吗。。。我在这个区域显示自定义的祝酒词很好,但是在这个窗口管理器上没有启用点击,我尝试过改变标志,但是我不能让它听到点击(以前使用不同的标志工作正常),有没有解决方案。。。我在这个区域显示定制的祝酒词