Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在不使用键盘保护的情况下禁用主页按钮?_Android_Android Layout_Android Manifest_Android Notifications - Fatal编程技术网

Android 如何在不使用键盘保护的情况下禁用主页按钮?

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); }

我创建了一个锁屏应用程序,我需要禁用一个home(主页)按钮,因此如果该手机被盗,则无法访问该手机。。我的锁屏是全屏活动。。我用这个代码来禁用主页按钮,但它给了我一些错误。代码如下:

    @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);
}