Remove Activity as Default Launcher

13,622

Solution 1

if it's your app that you're clearing its defaults , you can simply call :

getPackageManager().clearPackagePreferredActivities(getPackageName());

then , in order to show the dialog of choosing which launcher to use , use:

final Intent intent=new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);

Solution 2

This solution is a clever way of doing it: Clearing and setting the default home application

The code in onResume() basically goes like this:

    ComponentName componentName = new ComponentName(MyActivity.this, FakeHome.class);
    if (!isMyLauncherDefault()) {
        Log.e(TAG, "MyActivity is not default home activity!");

        // toggle fake activity
        PackageManager pm = getPackageManager();
        int flag = ((pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED
                : PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
        pm.setComponentEnabledSetting(componentName, flag, PackageManager.DONT_KILL_APP);

        // start home activity to enable chooser
        Intent selector = new Intent(Intent.ACTION_MAIN);
        selector.addCategory(Intent.CATEGORY_HOME);
        startActivity(selector);
    }

and the method isMyLauncherDefault() is taken from here: How to check if my application is the default launcher

Solution 3

You cannot override the behavior of the home key to suit your application; this is a design decision by Google, to ensure the user can always return to a static location. There may be some ways around this (if they still exist) but they are unintended bugs which an application should not rely on.

The short answer: you can have any key except the home key.

Solution 4

Have a look at the android.permission.SET_PREFERRED_APPLICATIONS permission. Also this method http://developer.android.com/reference/android/content/pm/PackageManager.html#clearPackagePreferredActivities(java.lang.String)

Share:
13,622
Mike Mackintosh
Author by

Mike Mackintosh

I am a Security Professional with a focus on automation. I enjoy contributing to the open-source community and am active on GitHub and Twitter. You can follow my blog at www.mikemackintosh.com. Follow me on Twitter: @mikemackintosh, GitHub: mikemackintosh or find me on Careers 2.0.

Updated on June 04, 2022

Comments

  • Mike Mackintosh
    Mike Mackintosh about 2 years

    I set my activity as a default launcher to intercept home button clicks like so:

    <activity
        android:name=".ExampleActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.HOME" />        
            <category android:name="android.intent.category.DEFAULT" />               
        </intent-filter>
    </activity>
    

    When my activity, ExampleActivity is launched, if i click the home key, I get prompted to choose. If I select make this my default and chose my activity, I am stuck In my activity as desired.

    The problem is, when I leave the activity, I try to remove my activity from the default launcher, but am unsuccessful.

    I have tried:

    ComponentName componentName = new ComponentName( 
                        "com.example.exampleactivity", 
                        "com.example.exampleactivity.class");
    
    pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
    

    And:

    PackageManager pm = getActivity().getPackageManager();
                 ComponentName name = new ComponentName(this, "com.example.exampleactivity.class");
                 pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
    

    But my designation for the home is never removed.

    Does anyone have a working way to fix the above?

    I only wan't the home button to be default for a specific activity, not my entire application. When I leave the activity, it should be removed and restored to default.