I have read many question about whether it is possible to prevent an Android application from starting, but all of the answers seem to be “no, you cannot”.
The idea is very simple: we want the user to be able to use a restrited set of applications that will be preinstalled on his mobile device. If the user tries to start a non authorized application, he will be prompted with a dialog asking for a PIN. If he enters the right PIN, then he will be able to run the application. Otherwise, the application will not be run.
As I said before, all the answers that I could find out there fall into two categories: “you can’t do that” and “you can do that by writting your own launcher application”.
However, I have seen applications such as ZDBox, which allow you to do just that. That is, with ZDBox you can define “non authorized” apps, in such a way that if the user tries to start one of them, he will need to enter a PIN to actually start the app. If he fails to provide one, the app will not start. The funny thing is that ZDBox does not require root access to do this.
So my question is, how can we prevent other apps from starting, just as ZDBox does?
All the examples I’ve seen involve running your app as a Launcher/Home Screen replacement. This is how all the child lock style apps I’ve used work. This has the advantage
- Pressing Home button doesn’t leave the app
- You have control of app launching
You can check out the android Launcher2 code to see how the Android launcher works. https://android.googlesource.com/platform/packages/apps/Launcher2.git
There does look to be one alternative that I can see. In that you can try and read the logcat entries to detect when a blacklisted app is launched or brought to foreground and then launch your app over the top.
Similar to how they detect an app launch in How to detect when the user launches another app? (Android)