Android 如何在不使用键盘保护的情况下禁用主页按钮?
我创建了一个锁屏应用程序,我需要禁用一个home(主页)按钮,因此如果该手机被盗,则无法访问该手机。。我的锁屏是全屏活动。。我用这个代码来禁用主页按钮,但它给了我一些错误。代码如下:Android 如何在不使用键盘保护的情况下禁用主页按钮?,android,android-layout,android-manifest,android-notifications,Android,Android Layout,Android Manifest,Android Notifications,我创建了一个锁屏应用程序,我需要禁用一个home(主页)按钮,因此如果该手机被盗,则无法访问该手机。。我的锁屏是全屏活动。。我用这个代码来禁用主页按钮,但它给了我一些错误。代码如下: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
@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,比如如果我关闭显示器并再次打开它,即使在全屏模式下我的活动也可以访问通知/状态区域。。错误如下所示:
首次启动应用程序:(仍然没有问题)
在我从电源按钮关闭屏幕并再次打开后:
主要问题在锁屏上。。当通知区域仍然可以访问时,则锁屏不可用
你知道怎么解决这个问题吗??请帮忙
当我按下结束键按钮时,我也面临同样的问题。您无法控制
主页按钮的行为。它将完成它的任务,您需要调整您的应用程序要求
对于全屏显示,请在清单文件中的活动标记中添加以下内容:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
对于我的手机,键盘护卫似乎覆盖了全屏,没有标题栏主题。通知栏始终存在。试试这个:
@Override
public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
super.onAttachedToWindow();
}
让您的视图延伸整个屏幕,它将覆盖通知区域。您的通知区域可能仍然可以单击(不可见),但我相信如果您捕获视图中的所有关键事件,它不应该向下传播到工具栏。非常简单,您应该在onAttachedToWindow()方法中禁用keyguard:
请尝试以下代码:
@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);
}
};
这是为上述问题所做的工作
@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”
添加到我Samusung口袋中的应用程序中,上面的任何操作都没有问题。经过进一步的搜索,我终于可以做到了
我将全屏显示在您的AndroidMainfest.xml中,如下所示(不是在活动代码中):
这正是我想要的。关闭/打开后,锁定主页按钮和相同的按钮。对于锁屏,为什么不使用以下按钮:
@Override
public void onAttachedToWindow() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}
如果用户没有设置安全锁定屏幕,则当您的应用关闭时,应用程序将直接进入主屏幕。如果用户确实设置了安全锁屏,那么无论您的应用程序如何关闭,接下来都会出现标准的安全锁屏。我想我不会担心禁用按钮。无论如何,用户都应该被允许使用标准的安全功能,因为它们提供的安全性比你的应用程序所能保证的要高。另外,您不必花时间编写安全解锁功能。我可以使用以下命令禁用主页按钮:@Override public void onAttachedToWindow(){this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);super.onAttachedToWindow();}但它会给我一些类似于上图的错误。。有什么想法吗?谢谢你的回答。。我已经添加了用于制作全屏活动的代码,但问题是当我关闭屏幕并再次打开时,它会给我带来一些错误,如上图所示:(嗨,Michael…你确定你提供的上述代码可以禁用home按钮吗..因为我使用了相同的代码,但home按钮没有禁用..你能帮助我吗?你当然可以控制home按钮。也许在发布此类声明之前搜索一下。你好@e_x_p我也面临同样的问题。你的解决方案在发布后也不起作用按下“结束”按钮。按下“结束”按钮后,通知区域再次可见。在SDK 14以上的版本中,TYPE_KEYGUARD已被弃用。它在target ADK版本21中根本不起作用。@KristyWelsh确切地说,TYPE_KEYGUARD在SDK 14以上的版本中已被弃用。您找到其他解决方案了吗?提前谢谢。@Sandepmaram java.lang、 IllegalArgumentException:添加窗口后无法更改窗口类型。KeyguardLock已被弃用!!有什么替代方法?
<activity
android:name=".geo.activity.LockActivity"
android:theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen" />
@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();
}
@Override
public void onAttachedToWindow() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}