Как отключить кнопку «Домой», не используя TYPE_KEYGUARD? - PullRequest
5 голосов
/ 28 сентября 2011

Я создаю приложение для блокировки экрана и мне нужно отключить кнопку «Домой», поэтому, если этот телефон украден, к нему нельзя получить доступ… Мой экран блокировки является полноэкранным действием… Я использую этот код для отключения кнопки «Домой» , но это дало мне некоторую ошибку. вот код:

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

этот код дал мне какую-то ошибку, такую ​​как область уведомлений / статуса, до сих пор можно получить доступ даже к моей активности в полноэкранном режиме, если я выключу свой дисплей и включу его снова .. ошибка такая:

Первое приложение запущено: (все еще без проблем)

enter image description here

после того, как я выключил экран с помощью кнопки питания и включил его снова: enter image description here

главная проблема на экране блокировки .. если область уведомлений все еще доступна, экран блокировки не нужен ..

есть идеи, как решить эту проблему? пожалуйста, помогите ..

Я также сталкиваюсь с той же проблемой, когда нажимаю кнопку завершения.

Ответы [ 7 ]

4 голосов
/ 17 октября 2012

Это работа для вышеуказанной проблемы.

@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" приложению

4 голосов
/ 24 декабря 2011

Для моего телефона TYPE_KEYGUARD переопределяет полноэкранный режим без заголовка темы. Панель уведомлений всегда присутствует. Попробуйте это:

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

Заставьте ваш вид растянуть весь экран, и он закроет область уведомлений. Ваша область уведомлений может быть кликабельной (невидимой), но я полагаю, что если вы поймете все ключевые события на вашем экране, она не должна распространяться вниз до панели.

2 голосов
/ 29 октября 2012

В моем Samusung Pocket ничего выше не работало нормально.Я мог бы сделать это, наконец, после дальнейшего поиска.

Я поместил их во весь экран в вашем AndroidMainfest.xml, как показано ниже (не в коде Acctivity):

<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 голос
/ 16 декабря 2012

Для блокировки экрана Почему бы вам просто не использовать следующее:

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

Если у пользователя не установлен защищенный экран блокировки, приложение закроется на главном экране. Если у пользователя есть защищенный экран блокировки, то следующий стандартный экран блокировки появится независимо от того, как закрывается ваше приложение. Я думаю, я бы не беспокоился об отключении кнопок. В любом случае пользователю должно быть разрешено использовать стандартные функции безопасности, поскольку они обеспечивают большую безопасность, чем вы можете гарантировать в своем приложении. Кроме того, вам не нужно тратить время на кодирование функций безопасной разблокировки.

1 голос
/ 26 июня 2012

Попробуйте этот код:

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


         }
    };
1 голос
/ 14 июня 2012

Это очень просто, вы должны отключить защиту клавиатуры в методе onAttachedToWindow ():

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard();
0 голосов
/ 28 сентября 2011

Вы не можете контролировать поведение Home Button.Он выполнит свою задачу, и вам необходимо настроить требования вашего приложения.

Для полноэкранного режима добавьте это в тег активности в файле манифеста:

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