0

我知道有很多关于在 android 4.0 上隐藏系统栏的讨论,但没有关于在 Android 4.0 平板电脑上禁用虚拟按钮或状态栏或系统栏功能的讨论?

这可能吗?有人可以引导我走向正确的方向吗?

谢谢!

4

2 回答 2

0

试试 FLAG_FULLSCREEN,它应该隐藏状态栏 http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_FULLSCREEN

于 2012-10-01T01:51:16.780 回答
0

我做了很多研究来设计锁屏,最后找到了永久禁用系统栏的解决方案,即导航栏(返回、主页、最近的应用软键)和状态栏。Android 禁用了覆盖除后退按钮之外的系统栏的功能。但是有一些工作可以使这项工作:

耐心地理解和实施屏幕固定,你就会成功。

您可以创建一个应用程序来控制要在其中实现屏幕固定的所有应用程序,或者您可以直接在要固定的同一应用程序中实现屏幕固定。

我将在本文中向您展示稍后的实现:

1.首先您的应用程序应该是设备所有者。

您可以通过多种方式执行此操作,最简单的是执行命令:

adb shell dpm set-device-owner [yourPackageName]/.[MyDeviceAdminReceiver]

创建一个扩展 DeviceAdminReceiver 的接收器(MyDeviceAdminReceiver)。你不需要在这里有任何代码。有关设备所有者实施的更多信息,请参阅此链接
http://florent-dupont.blogspot.com/2015/02/10-things-to-know-about-device-owner.html

以这种方式在 AndroidManifest.xml 文件中注册接收器:

<receiver
       android:name=".MyDeviceAdminReceiver"
       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" />

       <intent-filter>
         <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
       </intent-filter>
  </receiver>

2. 您的 onCreate 方法应如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lock_screen);

    ComponentName deviceAdmin = new ComponentName(this, MyDeviceAdminReceiver.class);
    DevicePolicyManager mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);


    if (mDpm.isDeviceOwnerApp(getPackageName())) {
        mDpm.setLockTaskPackages(deviceAdmin, new String[]{getPackageName()});
    }

    if (mDpm.isLockTaskPermitted(this.getPackageName()))
        startLockTask();

3.取消固定屏幕并使导航栏功能

在代码中要取消固定的位置调用函数 stopLockTask() 。例如在我的应用程序中,一旦我验证用户输入了正确的密码,我就会调用这个函数:

 if (userInput.length() == 4) {

                    if (userInput.equals(passcode)) {
                        userInput = "";
                        etxtPasscodeDisplay.setText("");
                        stopLockTask(); // this is what you need
                        unlockHomeButton(); // A method to show home screen when 
                         passcode is correct
                        finishAffinity(); //kill other activities
                    }

锁屏通常需要的额外信息:

1.如果您的应用程序是启动后出现的第一件事

为此,您需要一个服务(StartAtBootService)和一个接收器(BootCompletedReceiver)。

2.如果您希望您的应用在屏幕锁定和解锁后显示 (按下电源按钮锁定和解锁):

创建扩展服务的 AEScreenOnOffService 和扩展BroadcastReceiver的 AEScreenOnOffReceiver以在屏幕打开时启动您的活动。

有关我在这里提到的所有内容的详细信息,请参阅http://www.sureshjoshi.com/mobile/android-kiosk-mode-without-root/
这是一篇出色的文章,对我帮助很大。特别感谢作者。

我需要至少 10 个声望才能发布两个以上的链接。由于我是 stackoverflow 的新手,我没有足够的声誉,所以很抱歉无法分享我提到的所有链接。一旦我获得访问权限,肯定会更新帖子。

于 2017-05-11T22:09:48.723 回答