gpt4 book ai didi

android - 检测到 statusBar 已经崩溃

转载 作者:行者123 更新时间:2023-11-30 02:30:42 25 4
gpt4 key购买 nike

我在我的应用程序按钮中实现了扩展状态栏,尽管状态栏是隐藏的。为了实现这一点,我在 OnClick 中执行此操作:

@Override
public void onClick(View view) {
Utils.showTitleBar(ctx, false);
Utils.setNotification(ctx);
}

这个工作很好,但是,我想在 statusBar 折叠时隐藏 statusBar,为了实现这个,我实现了这个:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
Log.i("TAG", " boolen:" + Boolean.toString(hasFocus));
if (hasFocus && pref.getBoolean("belStatus", false))
Utils.showTitleBar(ctx, true);
}

这项工作也很好,但只有一次。下次我按下按钮并展开状态栏时,当我折叠它时,“onWindowDocousChanged”不再调用,因此状态栏仍然存在。那么,还有另一种检测状态栏崩溃的方法吗?或者有人可以帮我弄清楚为什么第二次没有调用“onWindowFocusChanged”?

如果有帮助,我使用的方法是:

 public static void setNotification(Context ctx){
Object sbservice = ctx.getSystemService( "statusbar" );
Class<?> statusbarManager;
try {
statusbarManager = Class.forName("android.app.StatusBarManager");
Method showsb;
if (Build.VERSION.SDK_INT >= 17) {
showsb = statusbarManager.getMethod("expandNotificationsPanel");
}
else {
showsb = statusbarManager.getMethod("expand");
}
showsb.invoke( sbservice );
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}

public static void showBelTitleBar(MainActivity ctx, boolean show){
View status = ctx.findViewById(R.id.status_bar);
if (show) {
if (Build.VERSION.SDK_INT < 16) {
ctx.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
ctx.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
}

} else {
if (Build.VERSION.SDK_INT < 16) {
ctx.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
ctx.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}

}

最佳答案

如果对某人有帮助,我通过在通知栏的打开中添加一些延迟来实现我的目标。这样 onWindowFocusChanged() 方法总是根据需要调用。所以现在我的代码是这样实现的:

findViewById(R.id.status_bar).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent e) {
Utils.showBelTitleBar(ctx, false, updateClkBtry, handler);
ctx.handler.postDelayed(new Runnable() {
@Override
public void run() {
Utils.setNotification(ctx);
}
}, 100);
return false;
}
});

关于android - 检测到 statusBar 已经崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com