Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓隐藏&;在oreo中禁用通知(状态)栏_Android - Fatal编程技术网

Android 安卓隐藏&;在oreo中禁用通知(状态)栏

Android 安卓隐藏&;在oreo中禁用通知(状态)栏,android,Android,通过禁用状态栏的拉和点击来引导应用程序的方法在android 8上不起作用。安瑟尔继续说 我已经在安卓7和更少的版本上测试过了,它可以正常工作,但在安卓8上拉动时,状态栏仍然会下拉 我没有找到任何解决办法。 请让我知道,如果有任何解决方案,也适用于奥利奥 谢谢 我正在MainActivity中使用以下代码 //Global Declaration Handler collapseNotificationHandler; @Override public void onWindowFoc

通过禁用状态栏的拉和点击来引导应用程序的方法在android 8上不起作用。安瑟尔继续说

我已经在安卓7和更少的版本上测试过了,它可以正常工作,但在安卓8上拉动时,状态栏仍然会下拉

我没有找到任何解决办法。 请让我知道,如果有任何解决方案,也适用于奥利奥


谢谢

我正在
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并解决了我的问题。我想问的一件事是,此任务是在后台运行的,这会使我的应用程序变慢。。有什么解决办法吗?