我在APP上嘗試阻止使用者使用STATUS_BAR,可是android.permission.STATUS_BAR為系統級app才能使用的權限,導致disableStatusBar()執行時會拋出java.lang.SecurityException: StatusBarManagerService: Neither user 10133 nor current process has android.permission.STATUS_BAR. 請問有甚麼方法可以解決權限的問題嗎?或是還有甚麼方法可以阻止使用者使用STATUS_BAR呢?
public void disableStatusBar() {
try {
@SuppressLint("WrongConstant")
Object service = context.getSystemService("statusbar");
Class<?> claz = Class.forName("android.app.StatusBarManager");
Method disable = claz.getMethod("disable", new Class[]{int.class});
disable.setAccessible(true);
disable.invoke(service, DISABLE_EXPAND);
} catch (Exception e) {
System.out.println("e: " + e.toString());
System.out.println(e.getCause());
e.printStackTrace();
}
}
試試看這篇
https://zhuanlan.zhihu.com/p/277342333
這篇是你要的,官方中文版可以放心看
不過我不確定還有沒有改,可以的話看一下英文版的
https://medium.com/androiddevelopers/gesture-navigation-going-edge-to-edge-812f62e4e83e
https://medium.com/androiddevelopers/gesture-navigation-handling-visual-overlaps-4aed565c134c
沒記錯的話應該是這樣
在Activity裡用這個,讓APP可以在繪製在系統欄上
不過單純沉浸模式不確定要不要用到這個
WindowCompat.setDecorFitsSystemWindows(window, false)
另一個是開啟沉浸模式
val controller = view.windowInsetsController
// 现在开始吸附式沉浸式体验 ...
controller.setSystemBarsBehavior(
BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
)
// 当我们想要隐藏系统栏
controller.hide(Type.systemBars())
官方文檔
https://developer.android.com/reference/android/view/WindowInsetsController#BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
API最好看一下,API30和API31都有改過
會有點麻煩 = =