0

The Problem:
I am writing an app where I want to save user from accidental exits.
For example, accidentally clicking on home key and exiting from app.
So when user presses Home key, I want to show them a dialog box asking if they really want to exit from app?
If user selects yes, then exit.
Otherwise just stay on the app.

I've tried and seen almost all the examples on stack overflow but non have worked for me yet.
Any suggestion is most welcome.

min Sdk Version for app = 12
target Sdk Version for app = 28

Non-working Code:

package com.tivo.homebutton;

import androidx.appcompat.app.AppCompatActivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.os.Build;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.WindowManager;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getWindow().setType((WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG));
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_HOME) {
            System.out.println("onKeyDown(): Got a Home Key.");
        }
        System.out.println("onKeyDown(): keyCode = " + keyCode);
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_HOME) {
            System.out.println("dispatchKeyEvent(): Got a Home Key.");
        }
        System.out.println("dispatchKeyEvent(): keyCode = " + event.getKeyCode());
        return super.dispatchKeyEvent(event);
    }
}

It's just not working even after changing the window type!
Do you guys have any idea on how can I make it?

Alien Geography
  • 383
  • 1
  • 2
  • 14

1 Answers1

0

Create a separate class and broadcast receiver for home button. Use the interface in your main activity for Listener, The clear solution is given here

MohanKumar
  • 960
  • 10
  • 26
  • Tried that as well. It gives me the onHomePressed() callback but it puts my app in background as well. how would I handle that part? – Alien Geography Sep 29 '19 at 06:00