Hide/Unhide Android App Icon
Hey Folks! Today I’m gonna talk about the Hiding/Unhiding android app icon in code.
Why we should hide the android app icon then?
It actually depends on your case there are some cases that you might wanna implement this feature for your android application.
- you are developing an app which has some security concern
- your app needs to be disappeared for some privacy concerns
- Evil things (Joking, don’t do that. it really sucks 😆)
here I’m gonna create a sample application with a single button to hide the app icon.
Let’s dive into code
for sake of simplicity I’ll write all logic in “button.OnclickListener” in MainActivity.
let’s get started with our simple layout with just a simple button:
Snippet code for hiding application icon in MainActivity.kt:
- packageManager: as you might already know this Class is for retrieving various kinds of information related to the application packages that are currently installed on the device. You can find this class through
Context#getPackageManager
. - CompoenetName: Identifier for a specific application component (
Activity
,Service
,BroadcastReceiver
, orContentProvider
) that is available. Two pieces of information, encapsulated here, are required to identify a component: the package (a String) it exists in, and the class (a String) name inside of that package. - packageManager.setCompoenetEnablesSetting: Set the enabled setting for a package component (activity, receiver, service, provider). This setting will override any enabled state which may have been set by the component in its manifest.
let’s briefly talk about some arguments that we passed:
- PackageManager.COMPONENT_ENABLED_STATE_DISABLED: This is a Flag for
setApplicationEnabledSetting(java.lang.String, int, int)
andsetComponentEnabledSetting(android.content.ComponentName, int, int)
: This component or application has been explicitly disabled, regardless of what it has specified in its manifest. - PackageManager.DONT_KILL_APP: This is a Flag parameter for
setComponentEnabledSetting(android.content.ComponentName, int, int)
to indicate that you don't want to kill the app containing the component. Be careful when you set this since changing component states can make the containing application's behavior unpredictable.
Alright as you might already understand we just disabled our component (Launcher Activity) explicitly to hide the app icon.
Here is the result after clicking on the button (take a look at “sample app” at the bottom of the app list to see the magic :))) ) :
All done!
But, Wait! how do we Unhide App icon then?
well, the good news is: you can unhide the app icon.
there’re some approaches about it that you might consider, however, these solutions might have something to do with some IPC things!
- Registering broadcast event to unhide the app icon
- Listening for push notifications
- Alarm manager
- Long-running bounded service
- Any other innovative ways :)
My solution: Registering broadcast event
Let’s get into it:
Scenario: I’m gonna register the event for an outgoing call, which means the application would hopefully unhide the app icon when an outgoing call has been made.
Note: Don’t forget to request runtime permission “READ_PHONE_STATE”
Let’s register implicit receiver:
And the receiver class would be:
now, let’s test the app :)
There it is 😉
github: github.com/babakmhz/
twitter: twitter.com/babakmhz/