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