我目前正在开发一款可以在状态栏上绘制视图的应用。
这是我的代码:
@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
android.view.ViewRoot$W@40518c50 - permission denied for this window type
答案 0 :(得分:0)
没关系,我解决了!问题不是TYPE,而是FLAGS。
答案 1 :(得分:0)
为了在状态栏的顶部绘制视图,这是在阅读了如此多的Stackoverflow帖子后对我有用的组合:
您需要在服务或活动中使用此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);
您只需在Android清单上获得此权限:
uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
希望有所帮助。在我的情况下,我只需要使用黄色或绿色的转换来为状态栏着色,以指示用户当前正在进行通话。