禁用系统栏Android 4.0

时间:2012-10-01 01:20:11

标签: android

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分: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的新手,因此我没有足够的声誉,所以我很抱歉无法分享我提到的所有链接。一旦我获得访问权限,肯定会更新帖子。