2012-07-13 93 views
0

我目前正在研究可以在状态栏上绘制视图的应用程序。干扰键盘保护程序

这里是我的代码:

@Override 
public void onCreate() { 
    // TODO Auto-generated method stub 
    super.onCreate(); 
    wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
    v = new StatusView(this); 

    lp = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      **WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL**, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
        | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, 
      PixelFormat.TRANSLUCENT); 
    wm.addView(v, lp); 
    Log.d(TAG, "Added view"); 
} 

不过,我得到一个安全异常说我没有使用此视图类型的权限。 所以我试着添加几个权限。以下是我迄今尝试过的:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/> 
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/> 
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 
<uses-permission android:name="android.permission.BIND_REMOTEVIEWS"/> 
<uses-permission android:name="android.permission.STATUS_BAR"/> 

有什么建议吗?这可能是不可能的,因为状态栏不被视为窗口的一部分。

编辑:

特定的错误是:

android.view.WindowManager$BadTokenException: unable to add window 
[email protected] - permission denied for this window type 

回答

0

没关系,我解决了这个问题!问题不是TYPE,而是FLAGS。

+0

你能解释一下吗? – r2DoesInc 2013-06-25 14:45:15

0

为了绘制状态栏的俯视图,这是读这么多的#1的帖子后为我工作的组合:

  1. 你必须在任您服务这个LayoutParameters的窗口管理器或者你的活动:

    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" 
    

希望有所帮助。在我的情况下,我只需要用黄色或绿色的正常色状态栏来表示用户当前正在进行通话。