disable the intent filter from android manifest programmatically

后端 未结 4 675
粉色の甜心
粉色の甜心 2020-12-16 22:27

In my activity I have a web view and in manifest.xml I have declared intent filter like this

 

        
4条回答
  •  暖寄归人
    2020-12-16 23:27

    You can do this (disable the intent filter from android manifest programatically) by using Activity Alias:

    1) add (e.g. AliasMySocialNetworkActivity) in AndroidManifest.xml to your MySocialNetworkActivity and move your intent-filter to them. It will be looks like that:

             
                
                    
                    
                    
                 
            
    

    2) add this code to suppress intent-filter in alias activity when You need that

    PackageManager pm = getApplicationContext().getPackageManager();
            ComponentName compName =
                    new ComponentName(getPackageName(), getPackageName() + ".AliasMySocialNetworkActivity");
            pm.setComponentEnabledSetting(
                    compName,
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
    

    3) restore intent-filter, when You need it:

    PackageManager pm = getApplicationContext().getPackageManager();
        ComponentName compName =
                new ComponentName(getPackageName(), getPackageName() + ".AliasMySocialNetworkActivity");
        pm.setComponentEnabledSetting(
                compName,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
    

    For more details see this or that answer.

    Update

    Actually You don't need Alias, just use PackageManager.COMPONENT_ENABLED_STATE_DISABLED/PackageManager.COMPONENT_ENABLED_STATE_ENABLED

    PackageManager pm = getApplicationContext().getPackageManager();
            ComponentName compName =
                    new ComponentName(getPackageName(), getPackageName() + ".MySocialNetworkActivity");
            pm.setComponentEnabledSetting(
                    compName,
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);
    

    directly on your activity. Thanks @pskink.

提交回复
热议问题