5

我创建一个锁屏应用程序,我需要禁用一个主页按钮,所以如果该手机被盗,该手机无法访问..我的锁屏是一个全屏活动..即时通讯使用此代码来禁用主页按钮,但它给了我一些错误。下面的代码:如何在不使用TYPE_KEYGUARD的情况下禁用主页按钮?

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

    } 

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

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     return false; 
    } 

代码给了我一些bug一样仍然可以访问,即使我在全屏模式下的活动,如果我再次..在关掉我的显示器并打开它的通知/状态区错误是这样的:

首次启动应用程序:(仍然没有问题)

enter image description here

我从电源按钮关闭后我的屏幕,并再次打开: enter image description here

的主要问题是在锁定屏幕上。当通知区域仍然可以访问,那么,锁屏是没有用的..

任何想法如何解决这个问题?请帮助..

我也面临同样的问题,当我按结束键按钮。

回答

4

我的电话TYPE_KEYGUARD似乎覆盖全屏,没有标题栏的主题。通知栏始终存在。试试这个:

@Override 
public void onAttachedToWindow() 
{ 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);  
    super.onAttachedToWindow(); 
} 

让你的视图伸展整个屏幕,它会掩盖通知区域。您的通知区域可能仍然是可点击的(不可见的),但我相信,如果您捕捉到视图中的所有关键事件,它不应该传播到酒吧。

+0

你好@e_x_p我也面临同样的问题你的解决方案在按下结束按钮后也不起作用按下结束按钮之后,通知区域再次可见 –

+0

This – AndroidDev

+1

TYPE_KEYGUARD在SDK 14以上的版本中已被弃用。它在目标ADK版本21中完全不起作用。 –

0

您无法控制Home Button的行为。它会完成它的任务,你需要调整你的应用程序需求。

为全屏显示在您的活动代码在你的manifest文件添加此:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
+0

我可以与此禁用主页按钮:@覆盖 公共无效onAttachedToWindow() { this.getWindow()的setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }但它给了我像上面的图片一些错误..任何想法? –

+0

感谢您的答案..我已经添加该代码已经为全屏活动,但问题是,当我关闭我的屏幕,并再次打开它,它会给我像上面的图片一些错误.. :( –

+0

您好迈克尔....你确定上面的代码你提供可以禁用主页按钮..科斯我使用相同的代码,但主页按钮没有禁用....你可以帮我吗? – user632905

1

这是非常简单的,你应该在onAttachedToWindow禁用键盘锁()方法:

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
lock.disableKeyguard(); 
+0

其工作正常...... –

1

试试这个代码:

@Override 
public void onAttachedToWindow() { 
    // TODO Auto-generated method stub 
    super.onAttachedToWindow(); 

    handler.postDelayed(mUpdateUiMsg, 100); 

} 


public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // TODO Auto-generated method stub 
    if(keyCode==KeyEvent.KEYCODE_BACK){ 
    return true; 
    } 
    if(keyCode==KeyEvent.KEYCODE_HOME){ 
    return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 


private Runnable mUpdateUiMsg = new Runnable() { 
     public void run() { 


      getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 


     } 
    }; 
4

这是上述问题的工作..

@Override 
public void onAttachedToWindow() { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 
    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
    lock.disableKeyguard(); 
    } 

添加android.permission.DISABLE_KEYGUARD权限并给android:theme="@android:style/Theme.NoTitleBar.Fullscreen"至应用程序

+0

KeyguardLock已弃用!有什么选择? – IronBlossom

2

在我的Samusung口袋里,上面没有任何工作正常。经过进一步的搜索,我终于可以做到了。

我把它们全屏放在你的AndroidMainfest中。XML像以下(不胡亚蓉代码):

<activity 
    android:name=".geo.activity.LockActivity" 
    android:theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen" /> 

而且使用keygurad onAttachedToWindow()方法,在你的活动:

@Override 
public void onAttachedToWindow() { 
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 
    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
    lock.disableKeyguard(); 
} 

正是我一直想。关闭/打开后阻止HOME按钮。

1

对于锁屏你为什么不只是使用下列内容:

@Override 
public void onAttachedToWindow() { 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
} 

如果用户没有一个安全的锁屏设置,应用程序就会转到主屏幕时,您的应用程序关闭。如果用户确实拥有安全的锁屏设置,那么无论您的应用如何关闭,标准安全锁屏都会出现。我想我不会担心禁用按钮。用户应该被允许使用标准的安全功能,因为它们提供了更多的安全性,然后你可以通过你的应用程序来保证。此外,您不必花时间编码安全解锁功能。

1
 @Override 
    public boolean onKeyDown(int keyCode, android.view.KeyEvent event) { 
     if((keyCode == KeyEvent.KEYCODE_HOME)){  
     return true; 
     } 
     return false; 
    } 
+0

它不适合我。 – sandeepmaaram

+0

正常活动不能截取家庭钥匙。重写此方法并不能解决任何问题。 – robert

相关问题