禁用主页按钮

9

我知道为用户控制HOME按钮是不好的建议。但我正在开发一个教育目的的安卓锁定应用程序。我浏览网站时看到了这个链接,可以禁用Home按钮。

@override

public void onAttachedToWindow()
{  
       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     
       super.onAttachedToWindow();  
}

目前,我正在使用上述代码来禁用我的主页按钮,但是我注意到即使我在onCreate中使用了这个代码,

getWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

我无法移除我的通知栏。 请给予建议。

3个回答

9

只需为您的活动使用不同的主题。在Manifest.xml中,将您的活动的主题属性设置为android:theme="@android:style/Theme.NoTitleBar.Fullscreen"。


我已经这样做了,但仍然在顶部有通知栏。<activity android:name="android.securitas.lockscreen" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen </activity>但是如果我把它放在 <application android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">那么它就能起作用了。而且在屏幕重新开启之后,通知栏又会出现。 - edyim
还有其他人有解决方案吗?我现在非常绝望。:( - edyim
你是在所有的活动中使用相同的主题吗?似乎有地方不匹配? - Stefan H Singer
有没有开源的锁屏替代品可以看看? - Stefan H Singer
我对Android还比较新。我听说过可以使用主屏替换来伪装锁屏。但是没有详细的步骤说明文档。你能指点我正确的方向吗? - edyim
显示剩余2条评论

7

您可以禁用电源按钮! 您可以尝试以下操作: 项目名称:DisableAllButton

  • Disable Search, Back key: in "DisableAllButton.java"

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        return false;
    }
    
  • Disable Home key: in "DisableAllKey.java"

    @Override
    public void onAttachedToWindow() {
        // TODO Auto-generated method stub
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow();
    }
    
  • Disable Powerkey: in "DisableAllKey.java"

    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
    KeyguardManager.KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
    lock.disableKeyguard();
    
  • in AndroidManifest

    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission>
    
  • and set fullscreen in AndroidManifest

    <application android:icon="@drawable/icon" android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    
完成了!:D.

感谢您的输入。然而,这并不能实现我在我的应用中想要的功能。我的应用程序基本上是一个由短信触发的锁屏。如果手机屏幕处于“开启”状态时,SMS到达后,活动将在没有通知栏的情况下启动。但是,如果屏幕处于“关闭”状态,则KeyguardManager会删除Android Keyguard屏幕,但我会收到通知栏。这可能不是理想的,因为可能有绕过我的锁屏的应用程序。 - edyim
项目中禁用所有按钮的位置在哪里? - pengwang
@pengwang 在mxplayer中禁用所有按钮。那么这可能吗? - kyogs
@kyogs 如果你禁用了Home键,我认为你应该对onuserhint进行重载。 - pengwang
@pengwang 我同意你的观点。但是你有什么想法可以禁用主页键吗? - kyogs
你看过 SDK 示例的主页演示吗?我认为你可以看一下。 - pengwang

1

检查Android源代码,View.java

public static final int STATUS_BAR_DISABLE_HOME = 0x00200000;

STATUS_BAR_DISABLE_HOME标志在标准api中被隐藏。

我们可以使用0x00200000来设置系统ui可见性,如下:

View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(decorView.getSystemUiVisibility()|0x00200000);

但是你应该添加。
<uses-permission android:name="android.permission.STATUS_BAR" />

首先,这个权限只授予系统应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接