How to disable the home key
Asked Answered
I

5

35

I'd like to lock the screen. I want to disable the home key and only use the back key. How do I accomplish this?

Isochronal answered 10/10, 2010 at 3:20 Comment(2)
see here, the fast answer it seems you need to implement a home screen replacement: #3954189 #2162682 #3725009 toddlerlock.com/3.htmlHoratius
Hi.. Have you got the solution. i'm also trying to disable Home key for my lock screen app, but its not working.Tortious
W
30

Use this method to disable the Home key in android

@Override
public void onAttachedToWindow() {
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();
}
Watchman answered 1/11, 2011 at 9:22 Comment(9)
Does this work with a fullscreen SurfaceView and MediaPlayer? Seems like it does not. Oh I got it: in this case TYPE_KEYGUARD_DIALOG works.Foothill
The user will still be able to slide down the Notification Bar... and once the bar is down they can click home and it will work.Vercingetorix
Have you tried it? I dont think so that the notification bar would work.Watchman
The notification bar still shows up and after bringing the notification bar down, pressing the home key goes back to the home screen. Any work arounds? Theme.Black.NoTitleBar and requestWindowFeature(Window.FEATURE_NO_TITLE) doesn't work.Universe
I am also looking for a solution to this issue: my fullscreen activity still exits when pressing the home button, even if I call setType with keyguard. Should I use an API level higher than Android 2.3?Tanh
I tried TYPE_KEYGUARD_DIALOG with SurfaceView and it works greatlyObola
Back key is blocked by this but not the home key.Speiss
its throws exception of illegalstate exceptionLeyte
This doesn't seem to work on modern Android versions. It throws an exception that one can't change the type of the window after it had been added.Adrell
C
23

I found a way to tackle the HOME key. For your application set the manifest as

<action android:name="android.intent.action.MAIN" />              
<category android:name="android.intent.category.HOME" />                 
<category android:name="android.intent.category.DEFAULT" />               
<category android:name="android.intent.category.MONKEY"/>

Now your application is an alternate Launcher application.

Use the adb, and disable the launcher application using package manager

pm disable com.android.launcher2

Now the Home key press will always stay in the same screen.

Colored answered 27/12, 2010 at 11:45 Comment(6)
pm disable com.android.launcher2 should be pm disable com.android.launcherWinna
@ kakopappa the package launcher is no longer used. The package is launcher2. Check the code in GitColored
I was try like this but i did't get exactly how to do this? will you please give me source code for more detail. thanks.Effectual
Hi I just want to disable the home key and not the back key. how this can be acheived?Dactylology
I have added above attributes to my activity in manifest file but still the home button takes my to launcher home screen even though I have set my app as default home screen. What should I do?Fylfot
Thanks man saved my day how to uninstall the app :) just disable these filters: <category android:name="android.intent.category.MONKEY" /> <category android:name="android.intent.category.HOME" />Councilor
L
13

This solution works up to 3.x only.

Okay, this was supposed to be a hard question. But here is a way to crack it.

Override the below method in your Activity,

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

And now handle the key event like this,

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
   if(keyCode == KeyEvent.KEYCODE_HOME)
    {
     Log.i("Home Button","Clicked");
    }
   if(keyCode==KeyEvent.KEYCODE_BACK)
   {
        finish();
   }
 return false;
}
Lashay answered 17/1, 2012 at 5:5 Comment(4)
In the ideal sense.. the KEYCODE_HOME will NEVER be returned to any app.Cundiff
My app crashes with this: java.lang.IllegalArgumentException: Window type can not be changed after the window is added.Interspace
...I moved the setType() call from onAttached to onCreate -- now no crash, but the home button isn't disabled.Interspace
Even if the api level is set to under ICS?Tanh
G
9

Add this code to your MainActivity class:

Timer timer;
MyTimerTask myTimerTask;

@Override
protected void onResume() {
    super.onResume();

    if (timer != null) {
        timer.cancel();
        timer = null;
    }
}

@Override
protected void onPause()
{
    if (timer == null) {
        myTimerTask = new MyTimerTask();
        timer = new Timer();
        timer.schedule(myTimerTask, 100, 100);
    }

    super.onPause();
}

private void bringApplicationToFront()
{
    KeyguardManager myKeyManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
    if( myKeyManager.inKeyguardRestrictedInputMode())
        return;

    Log.d("TAG", "====Bringging Application to Front====");

    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    try
    {
        pendingIntent.send();
    }
    catch (PendingIntent.CanceledException e)
    {
        e.printStackTrace();
    }
}

public void onBackPressed() {
    // do not call super onBackPressed.
}

class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        bringApplicationToFront();
    }
}

It's not a locking for 'home' button, but user can't switch to another app for a long time (more than 100 milliseconds), maybe this is what you want.

Galbraith answered 19/11, 2015 at 13:54 Comment(1)
Avoid blinking change this line timer.schedule(myTimerTask, 100, 100); to timer.schedule(myTimerTask, 1, 100);Chorister
A
1

To disable home button, try this:

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

Problem with notification bar pulled down can be solved by hiding notification bar like here:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.xxxx);
    getWindow().addFlags(LayoutParams.FLAG_FULLSCREEN);
    ....
}

or set fullscreen theme for your Activity or Application in manifest:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Arella answered 11/3, 2013 at 0:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.