我创建一个锁屏应用程序,我需要禁用一个主页按钮,所以如果该手机被盗,该手机无法访问..我的锁屏是一个全屏活动..我使用此代码禁用主页按钮,但它给了我一些bug。这是代码:
@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;
}
代码给了我一些像通知/状态区一样的错误,即使我在全屏模式下活动仍然可以访问,如果我关闭我的显示并再次打开它..错误是这样的:
第一次启动应用程序:(仍然没问题)
我从电源按钮关闭屏幕后再将其打开:
主要问题是在锁屏上..当仍然可以访问通知区域时,锁屏无用..
任何想法如何解决这个问题?请帮忙..
按下结束键按钮时,我也面临同样的问题。
答案 0 :(得分:4)
对于我的手机,TYPE_KEYGUARD似乎覆盖了全屏,没有标题栏主题。通知栏始终存在。试试这个:
@Override
public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
super.onAttachedToWindow();
}
让您的视图拉伸整个屏幕,它将覆盖通知区域。您的通知区域可能仍然是可点击的(隐形),但我相信如果您捕获到视图中的所有关键事件,它不应传播到栏中。
答案 1 :(得分: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"
提供给应用
答案 2 :(得分:2)
在我的Samusung Pocket中,没有任何上述工作正常。经过进一步的搜索,我终于可以做到了。
我把它们全部放在AndroidMainfest.xml中,如下所示(不在Acitivity代码中):
<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按钮。
答案 3 :(得分:1)
这很简单,你应该在onAttachedToWindow()方法中禁用keyguard:
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();
答案 4 :(得分: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);
}
};
答案 5 :(得分:1)
对于锁屏为什么不使用以下内容:
@Override
public void onAttachedToWindow() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}
如果用户没有设置安全锁定屏幕,应用程序将在您的应用关闭时转到主屏幕。如果用户确实设置了安全锁屏,那么无论您的应用如何关闭,标准安全锁屏都会出现。我想我不会担心禁用按钮。应该允许用户使用标准安全功能,因为它们提供了更高的安全性,您可以通过应用程序保证。此外,您不必花时间编写安全解锁功能。
答案 6 :(得分:0)
您无法控制Home Button
的行为。它将完成任务,您需要调整您的应用程序要求。
对于全屏,请在清单文件的活动代码中添加:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"