5

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

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

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

第一次申请开始:(还是没问题)

在此处输入图像描述

在我从电源按钮关闭屏幕并再次打开后: 在此处输入图像描述

主要问题是在锁屏上..当通知区域仍然可以访问时,锁屏没​​有用..

知道如何解决这个问题吗?请帮忙..

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

4

7 回答 7

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"应用程序

于 2012-10-17T13:09:57.700 回答
4

对于我的手机,TYPE_KEYGUARD 似乎覆盖了全屏,没有标题栏主题。通知栏始终存在。尝试这个:

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

让您的视图拉伸整个屏幕,它将覆盖通知区域。您的通知区域可能仍然可以点击(不可见),但我相信如果您在视图中捕获所有关键事件,它不应该传播到栏。

于 2011-12-24T04:06:38.957 回答
2

在我的三星口袋里,上面没有任何东西可以正常工作。经过进一步的搜索,我终于可以成功了。

我将它们全屏显示在您的 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按钮和相同。

于 2012-10-29T00:15:55.763 回答
1

这很简单,您应该在 onAttachedToWindow() 方法中禁用键盘保护:

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();
于 2012-06-14T13:11:32.060 回答
1

对于锁屏,为什么不直接使用以下内容:

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

如果用户没有设置安全锁屏,应用程序将在您的应用程序关闭时转到主屏幕。如果用户确实设置了安全锁屏,那么无论您的应用如何关闭,接下来都会出现标准的安全锁屏。我想我不会担心禁用按钮。无论如何都应该允许用户使用标准的安全功能,因为它们提供的安全性比您可以从您的应用程序中保证的更高。此外,您不必花时间编写安全解锁功能。

于 2012-12-16T02:42:45.133 回答
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);


         }
    };
于 2012-06-26T12:43:04.677 回答
0

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

对于全屏,在清单文件的活动标签中添加:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
于 2011-09-28T12:57:17.930 回答