Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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 如何禁用导航栏和状态栏的按钮?_Android_Statusbar_Navigationbar_Android Homebutton - Fatal编程技术网

Android 如何禁用导航栏和状态栏的按钮?

Android 如何禁用导航栏和状态栏的按钮?,android,statusbar,navigationbar,android-homebutton,Android,Statusbar,Navigationbar,Android Homebutton,我正在尝试开发一个全屏模式的应用程序。现在我已经将我的应用程序设置为沉浸式模式,每次状态栏和导航栏都会隐藏,只有当用户在屏幕的上/下边缘做出滑动手势时才会显示它们 我认为不可能永久禁用状态栏和导航栏,但如果我以沉浸式模式隐藏并禁用导航栏的所有三个按钮(主页按钮、后退按钮和任务管理器按钮),这将是一个很好的解决方案,尽管它们正在显示 注意:我只为Android p开发此应用程序,我只需要此版本的解决方案 要将应用程序设置为沉浸式模式,我已将其添加到我的AndroidManifest.xml <

我正在尝试开发一个全屏模式的应用程序。现在我已经将我的应用程序设置为沉浸式模式,每次状态栏和导航栏都会隐藏,只有当用户在屏幕的上/下边缘做出滑动手势时才会显示它们

我认为不可能永久禁用状态栏和导航栏,但如果我以沉浸式模式隐藏并禁用导航栏的所有三个按钮(主页按钮、后退按钮和任务管理器按钮),这将是一个很好的解决方案,尽管它们正在显示

注意:我只为Android p开发此应用程序,我只需要此版本的解决方案

要将应用程序设置为沉浸式模式,我已将其添加到我的AndroidManifest.xml

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.HOME"/>
   <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
我一直试图访问UI listener以避免手势,但失败了

window.decorView.setOnSystemUiVisibilityChangeListener {
  //For example hide action
  actionBar.hide()
}
我不知道如何访问导航栏按钮并禁用它们的操作,我还想避免从顶部边缘滑动并显示通知管理器视图

请提供一些帮助和建议? 提前谢谢

19年9月18日更新

为此,我在我的应用程序中实现了kiosk模式

我做了一个启动器活动,配置应用程序所需的所有内容,如果一切顺利,应用程序将运行,但如果没有,我会显示一条消息警告

有两个非常重要的先决条件:

1.设备中不应包含任何帐户(谷歌帐户、三星帐户等)

2.应用程序应该是设备的所有者和管理员(我将在后面解释)

步骤

1。在AndroidManifest中实现接收器

<receiver
                android:name=".security.CustomDeviceAdminReceiver"
                android:label="@string/app_name"
                android:permission="android.permission.BIND_DEVICE_ADMIN">
                <meta-data
                    android:name="android.app.device_admin"
                    android:resource="@xml/device_admin_receiver" />
                <intent-filter>
                    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
                </intent-filter>
            </receiver>
3。创建xml文件夹并在其中创建一个名为device_admin_receiver的xml文件

    class CustomDeviceAdminReceiver: DeviceAdminReceiver() {
        companion object {
            fun getComponentName(context: Context): ComponentName {
                return ComponentName(context.applicationContext, CustomDeviceAdminReceiver::class.java)
            }
        }
    }
<?xml version="1.0" encoding="utf-8"?>
<device-admin>
    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
        <expire-password />
        <encrypted-storage />
        <disable-camera />
    </uses-policies>
</device-admin>
<activity
        android:name=".screen.main.LauncherActivity"
        android:screenOrientation="portrait">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER"/>
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
5。使我的活动成为主活动和启动器

    class CustomDeviceAdminReceiver: DeviceAdminReceiver() {
        companion object {
            fun getComponentName(context: Context): ComponentName {
                return ComponentName(context.applicationContext, CustomDeviceAdminReceiver::class.java)
            }
        }
    }
<?xml version="1.0" encoding="utf-8"?>
<device-admin>
    <uses-policies>
        <limit-password />
        <watch-login />
        <reset-password />
        <force-lock />
        <wipe-data />
        <expire-password />
        <encrypted-storage />
        <disable-camera />
    </uses-policies>
</device-admin>
<activity
        android:name=".screen.main.LauncherActivity"
        android:screenOrientation="portrait">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER"/>
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
PD:要从设备中删除所有者配置文件以使其必须在终端中运行,请执行以下操作:

adb shell dpm remove-active-admin packageName/path to Admin device file 

啊,就这些

如果你想禁用所有方法,那么用户应该如何在他想要的时候退出你的应用程序?@VladyslavMatviienko这是因为它不是一个公共应用程序,是用于商业目的的,不可能退出应用程序app@TimCastelijns,正如我对Vladyslav所说的,它是用于商业目的的,所以它类似于kiosk模式,但我需要通过编程来实现,而不是用于移动设置。这是不可能的。只有kiosk模式才能做到这一点。我看到我可以禁用BackPressed()方法覆盖的后退按钮,但home和menu按钮恐怕不行,但notifications menu@VladyslavMatviienko呢?那么用户应该如何在需要时退出你的应用程序,如果你要禁用所有的方法来实现这一点?@VladyslavMatviienko这是因为它不是一个公共应用程序,是用于商业目的的,并且不可能退出app@TimCastelijns,正如我对Vladyslav所说的,它是用于商业目的的,所以类似于kiosk模式,但我需要以编程方式进行,而不是用于移动设置。这是不可能的。只有kiosk模式才能做到这一点。我看到我可以禁用back button Override on Backpressed()方法,但home和menu按钮恐怕不行,但是notifications menu@VladyslavMatviienko呢?