Android 安卓隐藏&;在oreo中禁用通知(状态)栏
通过禁用状态栏的拉和点击来引导应用程序的方法在android 8上不起作用。安瑟尔继续说 我已经在安卓7和更少的版本上测试过了,它可以正常工作,但在安卓8上拉动时,状态栏仍然会下拉 我没有找到任何解决办法。 请让我知道,如果有任何解决方案,也适用于奥利奥Android 安卓隐藏&;在oreo中禁用通知(状态)栏,android,Android,通过禁用状态栏的拉和点击来引导应用程序的方法在android 8上不起作用。安瑟尔继续说 我已经在安卓7和更少的版本上测试过了,它可以正常工作,但在安卓8上拉动时,状态栏仍然会下拉 我没有找到任何解决办法。 请让我知道,如果有任何解决方案,也适用于奥利奥 谢谢 我正在MainActivity中使用以下代码 //Global Declaration Handler collapseNotificationHandler; @Override public void onWindowFoc
谢谢 我正在
MainActivity
中使用以下代码
//Global Declaration
Handler collapseNotificationHandler;
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.d(tag, "window focus changed");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
collapseNow();
}
}
塌陷法
public void collapseNow() {
try {
// Initialize 'collapseNotificationHandler'
if (collapseNotificationHandler == null) {
collapseNotificationHandler = new Handler();
}
// Post a Runnable with some delay - currently set to 300 ms
collapseNotificationHandler.postDelayed(new Runnable() {
@Override
public void run() {
// Use reflection to trigger a method from 'StatusBarManager'
Object statusBarService = getSystemService("statusbar");
Class<?> statusBarManager = null;
try {
statusBarManager = Class.forName("android.app.StatusBarManager");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Method collapseStatusBar = null;
try {
// Prior to API 17, the method to call is 'collapse()'
// API 17 onwards, the method to call is `collapsePanels()`
if (Build.VERSION.SDK_INT > 16) {
collapseStatusBar = statusBarManager.getMethod("collapsePanels");
} else {
collapseStatusBar = statusBarManager.getMethod("collapse");
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
collapseStatusBar.setAccessible(true);
try {
collapseStatusBar.invoke(statusBarService);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// Currently, the delay is 10 ms. You can change this
// value to suit your needs.
collapseNotificationHandler.postDelayed(this, 10L);
}
}, 10L);
} catch (Exception e) {
e.printStackTrace();
}
}
public void collapseNow(){
试一试{
//初始化“collapseNotificationHandler”
if(collapseNotificationHandler==null){
collapseNotificationHandler=新处理程序();
}
//发布具有一定延迟的Runnable-当前设置为300毫秒
collapseNotificationHandler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
//使用反射从“StatusBarManager”触发方法
对象statusBarService=getSystemService(“statusbar”);
类statusBarManager=null;
试一试{
statusBarManager=Class.forName(“android.app.statusBarManager”);
}catch(classnotfounde异常){
e、 printStackTrace();
}
方法collapseStatusBar=null;
试一试{
//在API 17之前,要调用的方法是“collapse()
//从API 17开始,要调用的方法是`collapsePanels()`
如果(Build.VERSION.SDK_INT>16){
collapseStatusBar=statusBarManager.getMethod(“collapsePanels”);
}否则{
collapseStatusBar=statusBarManager.getMethod(“折叠”);
}
}捕获(无此方法例外){
e、 printStackTrace();
}
collapseStatusBar.setAccessible(true);
试一试{
调用(statusBarService);
}捕获(IllegalArgumentException e){
e、 printStackTrace();
}捕获(非法访问例外e){
e、 printStackTrace();
}捕获(调用TargetException e){
e、 printStackTrace();
}
//目前,延迟为10毫秒。您可以更改此设置
//满足您的需求的价值。
collapseNotificationHandler.postDelayed(这是10升);
}
}10升);
}捕获(例外e){
e、 printStackTrace();
}
}
在上面的链接中,用户可以选择Android Oreo及以上版本的第二个选项。用户可以向下拉,但它会立即向上拉。我正在为我的信息亭AApp使用第二个选项。它可以工作,但每次都不受限制。意味着我想禁用它。。那个窗口托盘在任何情况下都不会打开。这在android Oreo和更高版本中是不可能的。好的。。谢谢到目前为止这是可以管理的。。你能告诉我如何在所有活动中实现这一点吗?我应该在所有活动中分别定义这一点吗?我也在使用这一代码。但我的问题是如何在所有活动中实现这一点。我必须在所有活动中实现整个代码,还是可以在一个类中实现这个?我只在主活动中设置,当我在主活动中时它工作,但当我跳到任何其他活动时,它不工作,我会将整个事情框定给你,我正在制作一个gate应用程序,如果我锁定我的应用程序,那么它将被限制在手机中的我的应用程序中,如果它被密码解锁,那么我必须禁用所有锁定并启用通知栏。如果我再次锁定应用程序,那么我必须禁用该栏。。这就是整个场景我解决了。。谢谢你的帮助。当应用程序运行时,我在主活动中使用布尔值并使其为真,当它被破坏时,我将其更改为false并解决了我的问题。我想问的一件事是,此任务是在后台运行的,这会使我的应用程序变慢。。有什么解决办法吗?