调用时机,banStatusBar方法在onWindowFocusChanged方法调用,即在activity附着在window的时候调用,这个statusbar的disable必须再次设置为none(DISABLE_NONE),因为这个disable方法是全局的,必须没有除去,就算退出应用,状态栏也是不能下拉的,所以我这里选择在onPause方法设置none,代码如下:
public void onWindowFocusChanged(boolean hasFocus) { banStatusBar(); } @Override protected void onPause() { super.onPause(); unBanStatusBar(); }这里再贴一个状态栏下拉的方法吧,当记录,也当分享:
private void expandNotify() { int currentApiVersion = android.os.Build.VERSION.SDK_INT; try { Object service = getSystemService("statusbar"); Class<?> statusbarManager = Class .forName("android.app.StatusBarManager"); Method expand = null; if (service != null) { if (currentApiVersion <= 16) { expand = statusbarManager.getMethod("expand"); expand.setAccessible(true); expand.invoke(service); } else { expand = statusbarManager .getMethod("expandNotificationsPanel"); } expand.setAccessible(true); expand.invoke(service); } } catch (Exception e) { } }最后记得添加权限:
<uses-permission android:name="android.permission.STATUS_BAR" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/> <!--权限在manifest便签下,application标签之上-->PS:使用的时候Object service = getSystemService(“statusbar”)这句在android studio中字符串statusbar会出现红色波浪线,不用理会,照样能运行的。
有需要可以看看这个: 关于statusBarManager的源代码(安卓4.4) - 下载频道 - .NET http://download.csdn.net/detail/qq_26819733/9602861
17.09.21更新:
Caused by: java.lang.SecurityException: StatusBarManagerService: Neither user 10290 nor current process has android.permission.STATUS_BAR.想必大家5.0以上都会遇到这个错误,说明真的不能用反射达到禁止下拉状态栏的效果的,因为当前应用申请不到android.permission.STATUS_BAR这个权限,所以反射也不能解决。下这个结论,当结贴吧。起初想研究这个是因为我当时用安卓4.4的手机,同时刚好有个叫“BT戒手机”的app,当时就想研究一下,当时我写代码的时候是成功的,因为用的手机是安卓4.4的,而我现在我用的是安卓5.1的手机,发现此方法已无用。今晚下载了BT戒手机APP试了试,那个APP也是失效的。